如何检查对象是否为数组?[重复]
如何检查对象是否为数组?[重复]
这个问题已经有了答案:
我试图编写一个函数,可以接受字符串列表或单个字符串。如果它是一个字符串,那么我想将其转换为只有一个项目的数组,这样我就可以在不担心出错的情况下循环它。
那么如何检查变量是否是数组?
admin 更改状态以发布 2023年5月24日
在现代浏览器中,您可以这样做:
Array.isArray(obj)
(Chrome 5、Firefox 4.0、Internet Explorer 9、Opera 10.5 和 Safari 5 支持)
为了向后兼容,您可以添加以下内容:
// Only implement if no native implementation is available if (typeof Array.isArray === 'undefined') { Array.isArray = function(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; } };
如果您使用 jQuery,则可以使用 jQuery.isArray(obj)
或 $.isArray(obj)
。如果您使用 Underscore.js,则可以使用 _.isArray(obj)
。
如果您不需要检测在不同框架中创建的数组,您也可以直接使用 instanceof
:
obj instanceof Array
在ECMAScript标准中,查找Object类的方法是使用Object.prototype中的toString方法。
if(Object.prototype.toString.call(someVar) === '[object Array]') { alert('Array!'); }
或者您可以使用typeof测试其是否为字符串:
if(typeof someVar === 'string') { someVar = [someVar]; }
或者,如果您不关心性能,您可以将其连接到一个新的空数组中。
someVar = [].concat(someVar);
还有构造函数可以直接查询:
if (somevar.constructor.name == "Array") { // do something }
请查看来自T.J. Crowder的彻底解答,如下面他的评论中发布的那样。
查看这个基准测试,了解哪种方法的性能更好:http://jsben.ch/#/QgYAV
从@Bharath那里,使用ES6将字符串转换为数组作为所问的答案:
const convertStringToArray = (object) => { return (typeof object === 'string') ? Array(object) : object }
假设:
let m = 'bla' let n = ['bla','Meow'] let y = convertStringToArray(m) let z = convertStringToArray(n) console.log('check y: '+JSON.stringify(y)) . // check y: ['bla'] console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']