ما هي أفضل طريقة للتحقق مما إذا كان الكائن عبارة عن مصفوفة أم لا في Javascript؟

StackOverflow https://stackoverflow.com/questions/1202841

سؤال

لنفترض أن لدي وظيفة مثل ذلك:

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}

ويقول أتصل foo(1), كيف أعرف أنها ترجع مصفوفة أم لا؟

هل كانت مفيدة؟

المحلول

أستخدم هذه الوظيفة:

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

هي الطريقة التي jQuery.isArray تم تنفيذه.

تحقق من هذه المقالة:

نصائح أخرى

if(foo(1) instanceof Array)
    // You have an Array
else
    // You don't

تحديث: لا بد لي من الرد على التعليقات الواردة أدناه، لأن الناس ما زالوا يدعون أن هذا لن ينجح دون أن يجربوه بأنفسهم...

بالنسبة لبعض الكائنات الأخرى، لا تعمل هذه التقنية (على سبيل المثال."" مثيل String == false)، ولكن هذا يعمل مع Array.لقد قمت باختباره في IE6، IE8، FF، Chrome وSafari. جربه وانظر بنفسك قبل التعليق أدناه.

وهنا طريقة واحدة موثوقة جدا، تأخذ من جافا سكريبت: العناصر الجيدة، التي نشرتها أورايلي:

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

وأود أن أقترح التفاف في وظيفة الخاصة بك:

function isarray(my_value) {

    if (my_value && typeof my_value === 'object' &&  typeof my_value.length === 'number' &&
        !(my_value.propertyIsEnumerable('length')) 
         { return true; }
    else { return false; }
}

واعتبارا من ES5 هناك <لأ href = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray؟v=control" يختلط = "نوفولو noreferrer "> isArray .

Array.isArray([])  // true

لجعل الحل أكثر عمومية، قد لا يهمني ما إذا كان هو فعلا كائن صفيف. على سبيل المثال، document.getElementsByName () بإرجاع كائن أن "أعمال مثل" صفيف. "الامتثال صفيف" يمكن الافتراض إذا كان الكائن يحتوي على "طول" الملكية.

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top