js如何判断是不是数组
原创前言
在JavaScript编程中,数组是一种非常常用的数据结构。有时,我们需要判断一个变量是否为数组。下面将介绍几种判断变量是否为数组的方法。
方法一:使用 Array.isArray()
这是最简洁、最直接的一种判断方法,ES5 中引入了 Array.isArray() 方法,该方法可以返回一个布尔值,指示参数是否是一个数组。
function isArray(arr) {
return Array.isArray(arr);
}
console.log(isArray([1, 2, 3])); // 输出:true
console.log(isArray("hello")); // 输出:false
方法二:使用 instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在对象的原型链中。
function isArray(arr) {
return arr instanceof Array;
}
console.log(isArray([1, 2, 3])); // 输出:true
console.log(isArray("hello")); // 输出:false
需要注意的是,如果网页包含多个框架(例如,内嵌框架或跨域框架),那么大概存在两个不同的全局执行环境,从而拥有两个不同版本的Array构造函数。如果从一个框架向另一个框架传递数组,那么使用 instanceof 检测时会返回 false。
方法三:使用对象的 constructor 属性
每个对象都有一个 constructor 属性,该属性指向创建该对象的构造函数。
function isArray(arr) {
return arr.constructor === Array;
}
console.log(isArray([1, 2, 3])); // 输出:true
console.log(isArray("hello")); // 输出:false
这种方法同样存在与 instanceof 相同的问题,即在多个全局执行环境中不适用。
方法四:使用 Object.prototype.toString.call()
这是一种跨多个全局执行环境的判断方法。
function isArray(arr) {
return Object.prototype.toString.call(arr) === '[object Array]';
}
console.log(isArray([1, 2, 3])); // 输出:true
console.log(isArray("hello")); // 输出:false
这种方法可以适用于大多数情况,但是写法相对复杂化,通常不建议使用,除非需要处理多个全局执行环境的情况。
总结
以上就是几种判断变量是否为数组的方法。在实际开发中,推荐使用 Array.isArray() 方法,基于它的兼容性最好,使用最简洁。