ما هي أفضل طريقة للتحقق مما إذا كان الكائن عبارة عن مصفوفة أم لا في Javascript؟
-
05-07-2019 - |
سؤال
لنفترض أن لدي وظيفة مثل ذلك:
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';
}