什么是最好的方式来检查,如果对象是一个数组,或不在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]';
}
是的方式 的!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';
}
不隶属于 StackOverflow