如何识别数组
常见的问题是:我如何知晓某个变量是否是数组?
问题在于 JavaScript 运算符 typeof 返回 “object”:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
typeof fruits; // 返回 object
typeof 运算符返回 “object”,因为 JavaScript 数组属于对象。
解决方案 1:
为了解决这个问题,ECMAScript 5 定义了新方法 Array.isArray():
Array.isArray(fruits); // 返回 true
此方案的问题在于 ECMAScript 5 不支持老的浏览器。
解决方案 2:
创建 isArray() 函数以解决此问题:
1、可以通过检查 constructor 属性来确定某个对象是否为数组(包含单词 “Array”):
function isArray(fruits) {
return fruits.constructor.toString().indexOf("Array") > -1;
}
假如参数为数组,则上面的函数始终返回 true,更准确的解释是:假如对象原型包含单词 “Array” 则返回 true。
2、更简单,可以检查对象是否是数组函数:
function isArray(fruits) {
return fruits.constructor === Array;
}
注:
console.log(["Banana", "Orange", "Apple", "Mango"].constructor)
// 返回 "function Array() { [native code] }"
console.lo(Array)
// 返回 "function Array() { [native code] }"
解决方案 3:
假如对象由给定的构造器创建,则 instanceof 运算符返回 true:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits instanceof Array // 返回 true