কোনও ভেরিয়েবল একটি অ্যারে হয় তা কীভাবে সনাক্ত করবেন


101

জাভাস্ক্রিপ্টের একটি ভেরিয়েবল অ্যারে কিনা তা নির্ধারণ করার জন্য সেরা ডি-ফ্যাক্টো স্ট্যান্ডার্ড ক্রস ব্রাউজার পদ্ধতিটি কী?

ওয়েবে অনুসন্ধান করার জন্য বিভিন্ন ধরণের বিভিন্ন পরামর্শ রয়েছে, কিছু ভাল এবং বেশ কয়েকটি অবৈধ।

উদাহরণস্বরূপ, নিম্নলিখিতটি একটি প্রাথমিক পদ্ধতি:

function isArray(obj) {
    return (obj && obj.length);
}

যাইহোক, অ্যারেটি ফাঁকা থাকলে কী ঘটে তা লক্ষ্য করুন বা আপত্তি আসলে অ্যারে নয় তবে দৈর্ঘ্যের সম্পত্তি ইত্যাদি প্রয়োগ করে etc.

তাহলে বাস্তবায়নের ক্ষেত্রে ক্রস-ব্রাউজার হওয়া এবং এখনও দক্ষতার সাথে সম্পাদন করার ক্ষেত্রে কোন বাস্তবায়ন সবচেয়ে ভাল?


4
এই স্ট্রিং সত্য হবে না?
জেমস হুগার্ড

প্রদত্ত উদাহরণটি নিজেই প্রশ্নের উত্তর দেওয়ার মতো নয়, এটি সমাধানের কাছে কীভাবে আসা যেতে পারে তার উদাহরণ - যা প্রায়শই বিশেষ ক্ষেত্রে ব্যর্থ হয় (যেমন এটি তবে "তবে নোট করুন ...")।
স্টেপ

@ জেমস: বেশিরভাগ ব্রাউজারগুলিতে (IE বাদে) স্ট্রিংগুলি অ্যারের মতো হয় (অর্থাত্ সংখ্যাসূচক সূচকের মাধ্যমে অ্যাক্সেস সম্ভব)
ক্রিস্টোফ

1
বিশ্বাস করতে পারি না এটি করা এতটা কঠিন ...
ক্লাদিউ

উত্তর:


160

জেএস-তে বস্তুর প্রকারের চেকিং করা হয় instanceof, অর্থাৎ মাধ্যমে

obj instanceof Array

প্রতিটি ফ্রেমের নিজস্ব Arrayঅবজেক্ট থাকায় অবজেক্টটি ফ্রেমের সীমানা পেরিয়ে গেলে এটি কাজ করবে না । আপনি বস্তুর অভ্যন্তরীণ [[শ্রেণি]] সম্পত্তিটি পরীক্ষা করে এটি ঘিরে কাজ করতে পারেন । এটি পেতে, ব্যবহার করুন Object.prototype.toString()( এটি ECMA-262 দ্বারা কাজ করার গ্যারান্টিযুক্ত):

Object.prototype.toString.call(obj) === '[object Array]'

উভয় পদ্ধতিই কেবল আসল অ্যারেগুলির জন্য কাজ করবে এবং অ্যারে-জাতীয় বস্তু যেমন argumentsবস্তু বা নোড তালিকার মতো নয়। সমস্ত অ্যারের মতো অবজেক্টের একটি সংখ্যাসূচক lengthসম্পত্তি থাকতে হবে, আমি এইগুলির জন্য এটি পরীক্ষা করে দেখি:

typeof obj !== 'undefined' && obj !== null && typeof obj.length === 'number'

দয়া করে নোট করুন যে স্ট্রিংগুলি এই চেকটি পাস করবে, যা সমস্যা দেখা দিতে পারে কারণ আইই সূচক অনুসারে স্ট্রিংয়ের অক্ষরগুলিতে অ্যাক্সেসের অনুমতি দেয় না। অতএব, আপনি পরিবর্তন করতে চাইতে পারেন typeof obj !== 'undefined'করার typeof obj === 'object'প্রিমিটিভের এবং থেকে স্বতন্ত্র ধরনের সঙ্গে হোস্ট বস্তু বাদ দেওয়ার'object' alltogether। এটি স্ট্রিং অবজেক্টগুলিকে এখনও পাস হতে দেবে, যা ম্যানুয়ালি বাদ দিতে হবে।

বেশিরভাগ ক্ষেত্রে, আপনি যা জানতে চান তা হ'ল আপনি সংখ্যাসূচক সূচকের মাধ্যমে অবজেক্টটি পুনরুক্ত করতে পারবেন কিনা। সুতরাং, বস্তুর 0পরিবর্তে এই নামে কোনও সম্পত্তি আছে কিনা তা যাচাই করা ভাল ধারণা হতে পারে , যা এই চেকগুলির মধ্যে একটির মাধ্যমে করা যেতে পারে:

typeof obj[0] !== 'undefined' // false negative for `obj[0] = undefined`
obj.hasOwnProperty('0') // exclude array-likes with inherited entries
'0' in Object(obj) // include array-likes with inherited entries

অ্যারে সদৃশ আদিম (যেমন স্ট্রিং) এর জন্য সঠিকভাবে কাজ করার জন্য কাস্ট টু অবজেক্টের প্রয়োজন।

জেএস অ্যারেগুলির জন্য দৃust় চেকগুলির কোড এখানে:

function isArray(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
}

এবং পুনরাবৃত্তিযোগ্য (অর্থাত খালি নয়) অ্যারের মতো বস্তু:

function isNonEmptyArrayLike(obj) {
    try { // don't bother with `typeof` - just access `length` and `catch`
        return obj.length > 0 && '0' in Object(obj);
    }
    catch(e) {
        return false;
    }
}

7
জেএসে অ্যারে-চেকিং-এ অত্যাধুনিকের দুর্দান্ত সংক্ষিপ্তসার।
নোসরেডনা

এমএস জেএস 5.6 (আই 6?) হিসাবে, কোনও সিওএম অবজেক্টের (অ্যাক্টিভএক্সবজেক্ট) বিরুদ্ধে চালানোর সময় "ইনসেন্টফ" অপারেটর প্রচুর মেমরি ফাঁস করে দেয়। জেএস 5.7 বা জেএস 5.8 পরীক্ষা করে দেখেনি, তবে এটি এখনও সত্য ধরে রাখতে পারে।
জেমস হুগার্ড

1
@ জেমস: আকর্ষণীয় - আমি এই ফাঁস সম্পর্কে জানতাম না; যাইহোক, একটি সহজ ফিক্স আছে: আইইতে, কেবল নেটিভ জেএস বিষয়বস্তুর একটি hasOwnPropertyপদ্ধতি থাকে, তাই কেবল আপনার instanceofসাথে উপসর্গ করুন obj.hasOwnProperty && ; এছাড়াও, এটি এখনও আই 7 এর সাথে একটি সমস্যা? টাস্ক ম্যানেজারের মাধ্যমে আমার সাধারণ পরীক্ষাগুলি থেকে বোঝা যায় যে ব্রাউজারটি হ্রাস করার পরে স্মৃতি পুনরুদ্ধার করা হয়েছে ...
ক্রিস্টোফ

@ ক্রিসটফ - আই 7 সম্পর্কে নিশ্চিত নন, তবে আইআইআরসি এটি জেএস 5.7 বা 5.8 এর জন্য বাগফিক্সের তালিকায় ছিল না। আমরা কোনও পরিষেবাতে সার্ভার সাইডে অন্তর্নিহিত জেএস ইঞ্জিনটি হোস্ট করি, তাই ইউআই হ্রাস করা প্রযোজ্য নয়।
জেমস হুগার্ড

1
@ ট্র্যাভিসজে: ইসিএমএ -262 5.1 দেখুন, বিভাগ 15.2.4.2 ; অভ্যন্তরীণ শ্রেণীর নামগুলি কনভেনশন আপার কেস অনুসারে - বিভাগ 8.6.2 দেখুন
ক্রিস্টোফ

42

ECMAScript 5 ম সংস্করণে আগমন আমাদের পরীক্ষার সবচেয়ে নিশ্চিত-আগুন পদ্ধতি দেয় যদি কোনও ভেরিয়েবল একটি অ্যারে, অ্যারে.আইআরআরে () হয় :

Array.isArray([]); // true

যদিও এখানে গৃহীত উত্তর বেশিরভাগ ব্রাউজারের জন্য ফ্রেম এবং উইন্ডো জুড়ে কাজ করবে, এটি ইন্টারনেট এক্সপ্লোরার 7 এবং নিম্নের জন্য নয় , কারণ Object.prototype.toStringএকটি ভিন্ন উইন্ডো থেকে অ্যারে ডাকলে ফিরে আসবে [object Object], না [object Array]। আই 9 9 এছাড়াও এই আচরণটিতে প্রতিক্রিয়া প্রকাশ করেছে বলে মনে হয় (নীচে আপডেট হওয়া আপডেট দেখুন)।

আপনি যদি এমন কোনও সমাধান চান যা সমস্ত ব্রাউজার জুড়ে কাজ করে তবে আপনি এটি ব্যবহার করতে পারেন:

(function () {
    var toString = Object.prototype.toString,
        strArray = Array.toString(),
        jscript  = /*@cc_on @_jscript_version @*/ +0;

    // jscript will be 0 for browsers other than IE
    if (!jscript) {
        Array.isArray = Array.isArray || function (obj) {
            return toString.call(obj) == "[object Array]";
        }
    }
    else {
        Array.isArray = function (obj) {
            return "constructor" in obj && String(obj.constructor) == strArray;
        }
    }
})();

এটি সম্পূর্ণরূপে অটুট নয়, তবে এটি ভাঙার চেষ্টা করে কেউই এটি ভেঙে ফেলবে। এটি আই 7 এবং নিম্ন এবং আই 9 এর সমস্যাগুলি ঘিরে কাজ করে। আইটি 10 ​​পিপি 2-তে বাগটি এখনও বিদ্যমান রয়েছে , তবে এটি মুক্তির আগেই সংশোধন করা যেতে পারে।

পিএস, আপনি যদি সমাধানটির বিষয়ে অনিশ্চিত হন তবে আমি আপনাকে এটি আপনার হৃদয়ের সামগ্রীতে পরীক্ষা করার এবং / অথবা ব্লগ পোস্টটি পড়ার পরামর্শ দিচ্ছি। শর্তসাপেক্ষ সংকলন ব্যবহার করে আপনি যদি অস্বস্তি হন তবে সেখানে অন্যান্য সম্ভাব্য সমাধান রয়েছে।


গৃহীত উত্তরগুলি IE8 + তে ঠিক কাজ করে, তবে আই 6,7 এ নয়
ব্যবহারকারী 123444555621

@ পুম্বা ৮০: আপনি ঠিক বলেছেন :-) আইই 8 তার নিজের অবজেক্ট.প্রোটোটাইপ.টো স্ট্রিংয়ের জন্য সমস্যাটি ঠিক করে, তবে আইই 8 নথি মোডে তৈরি একটি অ্যারের পরীক্ষা করে যা একটি আই 7 বা নিম্ন নথির মোডে চলে গেছে, সমস্যাটি এখনও থেকেই যায়। আমি কেবল এই দৃশ্যটিই পরীক্ষা করে দেখেছি অন্যভাবে নয়। আমি এই ফিক্সটি কেবল আই 7 এবং এর চেয়ে কমতে প্রয়োগ করতে সম্পাদনা করেছি।
অ্যান্ডি ই

WAAAAAAA, আমি IEকে ঘৃণা করি। আমি বিভিন্ন "ডকুমেন্ট মোড" বা "স্কিজো মোডগুলি" সম্পর্কে ভুলে গিয়েছিলাম, কারণ আমি তাদের ডাকব।
ব্যবহারকারী 123444555621

আইডিয়াগুলি দুর্দান্ত এবং এটি দেখতে দুর্দান্ত লাগছে, পপআপ উইন্ডো সহ এটি আই 9 তে আমার পক্ষে কাজ করে না। এটি ওপেনার দ্বারা তৈরি অ্যারেগুলির জন্য মিথ্যা প্রত্যাবর্তন করে ... এখানে কোনও আই 99 কমপ্যাটবাইল সমাধান রয়েছে? । (সমস্যা হতে পারে, IE9 implemnets নিজেই Array.isArray, যা প্রদত্ত ক্ষেত্রে জন্য মিথ্যা ফেরৎ, যখন এটি না করা উচিত বলে মনে হয়
স্টিফেন Heil

@ স্টেফেন: আকর্ষণীয়, তাই isArrayঅন্য ডকুমেন্ট মোডে তৈরি অ্যারে থেকে দেশীয় বাস্তবায়ন সত্য হয় না? কিছুটা সময় পেলে আমাকে এটি খতিয়ে দেখতে হবে, তবে আমি মনে করি সবচেয়ে ভাল কাজ হ'ল সংযোগে একটি বাগ ফাইল করা যাতে এটি আইই 10 তে স্থির করা যায়
অ্যান্ডি ই

8

"গুড পার্টস" এর 106 পৃষ্ঠায় ক্রোকফোর্ডের দুটি উত্তর রয়েছে has প্রথমটি কনস্ট্রাক্টরটি পরীক্ষা করে, তবে বিভিন্ন ফ্রেম বা উইন্ডো জুড়ে মিথ্যা নেতিবাচক তথ্য দেয়। দ্বিতীয়টি এখানে:

if (my_value && typeof my_value === 'object' &&
        typeof my_value.length === 'number' &&
        !(my_value.propertyIsEnumerable('length')) {
    // my_value is truly an array!
}

ক্রকফোর্ড উল্লেখ করেছেন যে এই সংস্করণটি সনাক্ত করবে arguments অ্যারে হিসাবে অ্যারে , যদিও এর অ্যারে পদ্ধতিগুলির কোনও নেই।

সমস্যা নিয়ে তাঁর আকর্ষণীয় আলোচনাটি 105 এ শুরু হয়।

সেখানে আরও আকর্ষণীয় আলোচনা (পোস্ট-ভালো পার্টস) হল এখানে যা এই প্রস্তাব রয়েছে:

var isArray = function (o) {
    return (o instanceof Array) ||
        (Object.prototype.toString.apply(o) === '[object Array]');
};

সমস্ত আলোচনা আমাকে কখনই জানতে চায় না যে কোনও কিছু অ্যারে কিনা।


1
এটি স্ট্রিং অবজেক্ট এবং আই স্ট্রিং প্রিমিটিভগুলি বাদ দেয় না, যা আইই ব্যতীত অ্যারের মতো; আপনি যদি প্রকৃত অ্যারে চান তবে [[শ্রেণি]] পরীক্ষা করা ভাল; আপনি যদি অ্যারে-পছন্দসই জিনিসগুলি চান তবে চেকটি ইমোও খুব বাধাজনক
ক্রিস্টোফ

@ ক্রিস্টফ - আমি একটি সম্পাদনার মাধ্যমে আরও কিছু যুক্ত করেছি। আকর্ষণীয় বিষয়।
নসরেডনা

2

jQuery একটি isArray ফাংশন প্রয়োগ করে, যা এটি করার সর্বোত্তম উপায়ের পরামর্শ দেয়

function isArray( obj ) {
    return toString.call(obj) === "[object Array]";
}

(jQuery v1.3.2 থেকে নেওয়া স্নিপেট - প্রসঙ্গের বাইরে বোঝার জন্য কিছুটা সামঞ্জস্য করা)


তারা IE (# 2968) এ মিথ্যা প্রত্যাবর্তন করে। (
জ্যাকোরি

1
JQuery উত্সটিতে যে মন্তব্যটি মনে হয়েছে এটি ফাংশন ফাংশনটি উল্লেখ করেছে, আরে নয়
মারিও মেনজার

4
আপনার ব্যবহার করা উচিত Object.prototype.toString()- যা ভাঙার সম্ভাবনা কম
ক্রিস্টোফ

2

গুরু জন রেজিগ এবং জ্যাকুরির কাছ থেকে চুরি করা:

function isArray(array) {
    if ( toString.call(array) === "[object Array]") {
        return true;
    } else if ( typeof array.length === "number" ) {
        return true;
    }
    return false;
}

2
দ্বিতীয় পরীক্ষাটিও একটি স্ট্রিংয়ের জন্য সত্য হবে: টাইপফোন "এবিসি"। দৈর্ঘ্য === "সংখ্যা" // সত্য
ড্যানিয়েল ভ্যান্ডারসলুইস

2
এছাড়াও, আমি অনুমান করি যে "নাম্বার" এর মতো আপনার কখনই হার্ডকোড টাইপের নাম রাখা উচিত নয়। এটিকে পরিবর্তে প্রকৃত সংখ্যার সাথে তুলনা করে দেখুন,
টাইপফ

5
@ এমটিড: কেন নামগুলি হার্ডকোড করা উচিত নয়? সর্বোপরি, ফেরতের মানগুলি typeofমানসম্মত হয়?
ক্রিস্টোফ

1
@ অহ্নোস নিজেকে ব্যাখ্যা করুন
পেসারিয়ার

1

একবার আপনি এটির অ্যারে স্থির করে সিদ্ধান্তটি নিয়ে কী করবেন?

উদাহরণস্বরূপ, যদি আপনি অন্তর্নির্মিত মানগুলি অ্যারের মতো দেখায় বা এটি হ্যাশ-টেবিল হিসাবে ব্যবহৃত কোনও বস্তু হিসাবে গণনা করার উদ্দেশ্যে থাকেন তবে নীচের কোডটি আপনি যা চান তা পেয়ে যায় (ক্লোজর ফাংশনটি অন্য কোনও কিছু ফেরত দিলে এই কোডটি বন্ধ হয়ে যায়) "অপরিজ্ঞাত" এর চেয়ে বেশি। নোট করুন যে এটি সিওএম পাত্রে বা গণনার উপরে পুনরাবৃত্তি করে না; এটি পাঠকের অনুশীলন হিসাবে ছেড়ে গেছে):

function iteratei( o, closure )
{
    if( o != null && o.hasOwnProperty )
    {
        for( var ix in seq )
        {
            var ret = closure.call( this, ix, o[ix] );
            if( undefined !== ret )
                return ret;
        }
    }
    return undefined;
}

(দ্রষ্টব্য: "ও! = নাল" পরীক্ষা নাল এবং অপরিশোধিত উভয়ের জন্য)

ব্যবহারের উদাহরণ:

// Find first element who's value equals "what" in an array
var b = iteratei( ["who", "what", "when" "where"],
    function( ix, v )
    {
        return v == "what" ? true : undefined;
    });

// Iterate over only this objects' properties, not the prototypes'
function iterateiOwnProperties( o, closure )
{
    return iteratei( o, function(ix,v)
    {
        if( o.hasOwnProperty(ix) )
        {
            return closure.call( this, ix, o[ix] );
        }
    })
}

যদিও উত্তরটি আকর্ষণীয় হতে পারে তবে এ প্রশ্নের সাথে আসলেই কিছু করার নেই (এবং বিটিডাব্লু: অ্যারে দিয়ে পুনরুক্তি for..inকরা খারাপ [টিএম])
ক্রিস্টোফ

@ ক্রিসটফ - অবশ্যই এটি হয়। কোনও জিনিস অ্যারে হয় তা সিদ্ধান্ত নেওয়ার কিছু কারণ থাকতে হবে: কারণ আপনি মানগুলি দিয়ে কিছু করতে চান। সর্বাধিক সাধারণ জিনিসগুলি (আমার কোডে, কমপক্ষে) হ'ল ম্যাপ, ফিল্টার করা, অনুসন্ধান করা বা অন্যথায় অ্যারেতে ডেটা রূপান্তর করা। উপরের ফাংশনটি হুবহু এটি করে: যদি পাস করা জিনিসটির মধ্যে এমন উপাদান থাকে যা পুনরাবৃত্ত হতে পারে, তবে এটি তাদের উপর পুনরাবৃত্তি করে। যদি তা না হয় তবে তা কিছুই করে না এবং নির্দোষভাবে অপরিবর্তিত ফেরত দেয়।
জেমস হুগার্ড

@ ক্রিসটফ - কেন খারাপ [টিএম] দিয়ে অ্যারে দিয়ে পুনরাবৃত্তি হচ্ছে? আরে এবং / অথবা হ্যাশ টেবিলগুলি (অবজেক্টস) নিয়ে আপনি আর কীভাবে পুনরাবৃত্তি করবেন?
জেমস হুগার্ড

1
@ জেমস: for..inঅবজেক্টের অসংখ্য গুণাবলী নিয়ে পুনরাবৃত্তি; আপনার এটি অ্যারে ব্যবহার করা উচিত নয় কারণ: (1) এটি ধীর; (২) এটি অর্ডার সংরক্ষণের গ্যারান্টিযুক্ত নয়; (3) এটিতে কোনও ব্যবহারকারীর সংজ্ঞায়িত সম্পত্তি বা তার কোনও প্রোটোটাইপগুলিতে সেট করা অন্তর্ভুক্ত থাকবে কারণ ES3 তে ডন্টইনাম বৈশিষ্ট্য নির্ধারণের কোনও উপায় অন্তর্ভুক্ত নয়; আমার মন
ক্রিস্টোফ

1
@ ক্রিসটফ - অন্যদিকে, (;;) এর জন্য ব্যবহার বিচ্ছিন্ন অ্যারেগুলির জন্য সঠিকভাবে কাজ করবে না এবং এটি বস্তুর বৈশিষ্ট্যগুলিকে পুনরাবৃত্তি করবে না। আপনার উল্লেখযোগ্য কারণে # 3 অবজেক্টের জন্য খারাপ ফর্ম হিসাবে বিবেচিত। অন্যদিকে, আপনি পারফরম্যান্সের সাথে সামঞ্জস্য রেখে ঠিকই আছেন: কারণ 1 ম এলিমেন্ট অ্যারেতে (;;) এর চেয়ে ~ 36x কম ধীর। কি দারুন. দুর্ভাগ্যজনকভাবে, আমাদের প্রধান ব্যবহারের ক্ষেত্রে প্রযোজ্য নয়, যা পুনরুক্তি করা অবজেক্টের বৈশিষ্ট্যগুলি (হ্যাশ টেবিলগুলি)।
জেমস হুগার্ড

1

আপনি যদি কাউচডিবিতে এটি করছেন (স্পাইডারমনকি) তবে ব্যবহার করুন

Array.isArray(array)

হিসাবে array.constructor === Arrayবা array instanceof Arrayকাজ না। ব্যবহার করা array.toString() === "[object Array]"কাজ করে তবে তুলনায় তুলনামূলকভাবে বেশ অদ্ভুত বলে মনে হচ্ছে।


এটি নোড.জেজে এবং ব্রাউজারগুলিতেও কাজ করে, কেবল কাউচডিবি নয়: বিকাশকারী.মোজিলা.আর.ইন
কার্ল উইলবার ২


0

ডাব্লু 3 স্কুলে একটি উদাহরণ রয়েছে যা বেশ স্ট্যান্ডার্ড হওয়া উচিত।

কোনও ভেরিয়েবল একটি অ্যারে কিনা তা পরীক্ষা করতে তারা এর অনুরূপ কিছু ব্যবহার করে

function arrayCheck(obj) { 
    return obj && (obj.constructor==Array);
}

ক্রোম, ফায়ারফক্স, সাফারি, অর্থাৎ tested পরীক্ষিত


constructorটাইপ চেকিংয়ের জন্য ব্যবহার করা ইমো খুব ভঙ্গুর; পরিবর্তে প্রস্তাবিত বিকল্পগুলির একটি ব্যবহার করুন
ক্রিস্টোফ

আপনি কেন সেটা মনে করেন? ভঙ্গুর সম্পর্কে?
কামারে

@ কামারে: constructorপ্রোটোটাইপ অবজেক্টের নিয়মিত ডন্টইনাম সম্পত্তি; এটি অন্তর্নির্মিত প্রকারগুলির জন্য সমস্যা না হওয়া উচিত যতক্ষণ না কেউ বোকা কিছু করে না, তবে ব্যবহারকারী-সংজ্ঞায়িত প্রকারের জন্য এটি সহজেই হতে পারে; আমার পরামর্শ: সর্বদা ব্যবহার করুন instanceof, যা প্রোটোটাইপ-চেইন পরীক্ষা করে এবং এমন বৈশিষ্ট্যগুলির উপর নির্ভর করে না যা নির্বিচারে ওভাররাইট করা যায়
ক্রিস্টোফ

1
ধন্যবাদ, এখানে আরও একটি ব্যাখ্যা পাওয়া গেছে: চিন্তাভাবনা 2
প্রকল্পগুলি

এটি নির্ভরযোগ্য নয়, কারণ অ্যারে অবজেক্টটি নিজেই একটি কাস্টম অবজেক্টের সাথে ওভার-লিখিত হতে পারে।
জোশ স্টোডোলা

-2

এই ফাংশনটির অন্যতম সেরা গবেষণা এবং আলোচিত সংস্করণ পিএইচপিজেএস সাইটে পাওয়া যাবে । আপনি প্যাকেজগুলিতে লিঙ্ক করতে পারেন বা সরাসরি ফাংশনে যেতে পারেন । আমি জাভাস্ক্রিপ্টে পিএইচপি ফাংশনগুলির সুনির্মিত সমতুল্যদের জন্য সাইটের উচ্চতর সুপারিশ করছি।


-2

কনস্ট্রাক্টরের সমান পর্যাপ্ত রেফারেন্স নেই। কিছু সময় তাদের কনস্ট্রাক্টরের বিভিন্ন উল্লেখ রয়েছে। সুতরাং আমি তাদের স্ট্রিং উপস্থাপনা ব্যবহার।

function isArray(o) {
    return o.constructor.toString() === [].constructor.toString();
}

দ্বারা বোকা{constructor:{toString:function(){ return "function Array() { [native code] }"; }}}
বার্গি

-4

Array.isArray(obj)দ্বারা প্রতিস্থাপনobj.constructor==Array

নমুনা:

Array('44','55').constructor==Array সত্য প্রত্যাবর্তন করুন (আইই 8 / ক্রোম)

'55'.constructor==Array মিথ্যা প্রত্যাবর্তন করুন (আইই 8 / ক্রোম)


3
আপনি কেন কোনও ভয়াবহ কাজের সাথে সংশোধন করবেন?
বার্গি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.