假设我有这样的功能:
function foo(bar) {
if (bar > 1) {
return [1,2,3];
} else {
return 1;
}
}
说我打电话foo(1)
,我怎么知道它是否返回一个数组?
假设我有这样的功能:
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
更新:我必须回应下面的评论,因为人们仍然声称如果不亲自尝试,这将无法工作......
对于其他一些对象,此技术不起作用(例如“” instanceof String == false),但这适用于Array。我在 IE6、IE8、FF、Chrome 和 Safari 中对其进行了测试。在下面发表评论之前,先试试看。
这是一种非常可靠的方法,取自 Javascript:O'Reilly 发布的好的部分:
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 开始,有isArray
.
Array.isArray([]) // true
为了使您的解决方案更通用,您可能不在乎它是否实际上是一个 Array 对象。例如,document.getElementsByName() 返回一个“行为类似于”数组的对象。如果对象具有“长度”属性,则可以假定“数组符合性”。
function is_array_compliant(obj){
return obj && typeof obj.length != 'undefined';
}