如何检查JavaScript中的变量是否为数组?[重复]

我想检查一个变量在JavaScript中是数组还是单个值。

我找到了可能的解决方案...

if (variable.constructor == Array)...

这是最好的方法吗?

米亚十三Harry2020/03/09 19:47:09

我刚想出的东西:

if (item.length) //This is an array else //not an array

猴子Near2020/03/09 19:47:09

由于.length属性专用于javascript中的数组,因此您可以简单地说

obj.length === +obj.length // true if obj is an array

Underscorejs和其他几个库使用了这个简短的技巧。

西里猿LEY2020/03/09 19:47:09

我已经创建了这段代码,可以返回真实类型。

我还不确定性能,但这是尝试正确识别typeof。

https://github.com/valtido/better-typeOf在这里也对此发表了一些博客http://www.jqui.net/jquery/better-typeof-than-the-javascript-native-typeof/

它的工作原理类似于当前的typeof。

var user = [1,2,3]
typeOf(user); //[object Array]

它认为可能需要进行一些微调,并考虑到一些问题,我还没有遇到或对其进行适当的测试。因此,无论是从性能角度还是错误地重新导入typeOf,都欢迎进一步改进。

小小猴子2020/03/09 19:47:09

对于那些编码高尔夫的人来说,这是一个最少字符的不可靠测试:

function isArray(a) {
  return a.map;
}

在遍历/展平层次结构时通常使用以下方法:

function golf(a) {
  return a.map?[].concat.apply([],a.map(golf)):a;
}

input: [1,2,[3,4,[5],6],[7,[8,[9]]]]
output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
西里宝儿Harry2020/03/09 19:47:09

w3schools

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
凯泡芙JinJin2020/03/09 19:47:09

我正在使用以下代码行:

if (variable.push) {
   // variable is array, since AMAIK only arrays have push() method.
}
NearSamHarry2020/03/09 19:47:09

https://github.com/miksago/Evan.js/blob/master/src/evan.js引用的代码

  var isArray = Array.isArray || function(obj) {
    return !!(obj && obj.concat && obj.unshift && !obj.callee);};
老丝Jim猴子2020/03/09 19:47:09

以为我会为可能已经在其脚本中使用Underscore.js库的用户添加另一个选项。Underscore.js具有isArray()函数(请参见http://underscorejs.org/#isArray)。

_.isArray(object) 

如果object是Array,则返回true。

Davaid神无2020/03/09 19:47:09

如果您只处理EcmaScript 5及更高版本,则可以使用内置Array.isArray函数

例如,

Array.isArray([])    // true
Array.isArray("foo") // false
Array.isArray({})    // false
古一蛋蛋2020/03/09 19:47:09

如果您使用的是Angular,则可以使用angular.isArray()函数

var myArray = [];
angular.isArray(myArray); // returns true

var myObj = {};
angular.isArray(myObj); //returns false

http://docs.angularjs.org/api/ng/function/angular.isArray

Green前端2020/03/09 19:47:09

当我发布此问题时,我使用的JQuery版本未包含isArray函数。如果有的话,我可能会相信它是实现此特定类型检查的独立于浏览器的最佳方式。

由于JQuery现在确实提供了此功能,所以我会一直使用它...

$.isArray(obj);

(从1.6.2版开始)仍然可以通过以下形式对字符串进行比较来实现

toString.call(obj) === "[object Array]"
Sam小哥理查德2020/03/09 19:47:09

这是一个古老的问题,但是遇到同样的问题,我找到了一个非常优雅的解决方案,我想与他人分享。

向Array添加原型可以使其非常简单

Array.prototype.isArray = true;

现在,如果您有一个对象,则要测试以查看其是否为数组,只需检查新属性即可

var box = doSomething();

if (box.isArray) {
    // do something
}

isArray仅在其为数组时可用

蛋蛋LEY2020/03/09 19:47:09

我注意到有人提到jQuery,但我不知道有一个isArray()函数。事实证明,它是在1.3版中添加的。

jQuery按照Peter的建议实现了它:

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

已经对jQuery充满信心(尤其是他们的跨浏览器兼容性技术),我将升级到1.3版并使用其功能(假设升级不会引起太多问题),或者直接在我的系统中使用此建议的方法码。

非常感谢您的建议。