我想检查一个变量在JavaScript中是数组还是单个值。
我找到了可能的解决方案...
if (variable.constructor == Array)...
这是最好的方法吗?
我想检查一个变量在JavaScript中是数组还是单个值。
我找到了可能的解决方案...
if (variable.constructor == Array)...
这是最好的方法吗?
由于.length属性专用于javascript中的数组,因此您可以简单地说
obj.length === +obj.length // true if obj is an array
Underscorejs和其他几个库使用了这个简短的技巧。
我已经创建了这段代码,可以返回真实类型。
我还不确定性能,但这是尝试正确识别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,都欢迎进一步改进。
对于那些编码高尔夫的人来说,这是一个最少字符的不可靠测试:
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]
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
我正在使用以下代码行:
if (variable.push) {
// variable is array, since AMAIK only arrays have push() method.
}
从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);};
以为我会为可能已经在其脚本中使用Underscore.js库的用户添加另一个选项。Underscore.js具有isArray()函数(请参见http://underscorejs.org/#isArray)。
_.isArray(object)
如果object是Array,则返回true。
如果您只处理EcmaScript 5及更高版本,则可以使用内置Array.isArray
函数
例如,
Array.isArray([]) // true
Array.isArray("foo") // false
Array.isArray({}) // false
如果您使用的是Angular,则可以使用angular.isArray()函数
var myArray = [];
angular.isArray(myArray); // returns true
var myObj = {};
angular.isArray(myObj); //returns false
当我发布此问题时,我使用的JQuery版本未包含isArray
函数。如果有的话,我可能会相信它是实现此特定类型检查的独立于浏览器的最佳方式。
由于JQuery现在确实提供了此功能,所以我会一直使用它...
$.isArray(obj);
(从1.6.2版开始)仍然可以通过以下形式对字符串进行比较来实现
toString.call(obj) === "[object Array]"
这是一个古老的问题,但是遇到同样的问题,我找到了一个非常优雅的解决方案,我想与他人分享。
向Array添加原型可以使其非常简单
Array.prototype.isArray = true;
现在,如果您有一个对象,则要测试以查看其是否为数组,只需检查新属性即可
var box = doSomething();
if (box.isArray) {
// do something
}
isArray仅在其为数组时可用
我注意到有人提到jQuery,但我不知道有一个isArray()
函数。事实证明,它是在1.3版中添加的。
jQuery按照Peter的建议实现了它:
isArray: function( obj ) {
return toString.call(obj) === "[object Array]";
},
已经对jQuery充满信心(尤其是他们的跨浏览器兼容性技术),我将升级到1.3版并使用其功能(假设升级不会引起太多问题),或者直接在我的系统中使用此建议的方法码。
非常感谢您的建议。
我刚想出的东西:
if (item.length) //This is an array else //not an array