① instanceof 操作符判断
用法:arr instanceof Array
instanceof 主要是用来判定某一个对象是否是某一个构造函数的实例
function obj(){}
let o1 = new obj();
console.log(o1 instanceof obj); // true
那么我们用instanceof 来判断数组的方法如下:
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(arr instanceof Array); // true
console.log(str instanceof Array); // false
但是 instanceof 会有一个问题,它的问题在于假定只有一个全局执行的环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有不同的构造函数。
②对象构造函数的 constructor判断
用法:arr.constructor === Array
Object的每个实例都有构造函数 constructor,用于保存着用于创建当前对象的函数
function obj(){}
let o1 = new obj();
console.log(o1.constructor === obj); // true
如上所示,obj 的实例 o1 的 constructor 跟 obj 对象是相等的
那么我们就可以用此来判断数组了
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(arr.constructor === Array); // true
console.log(str.constructor === Array); // false
③Array 原型链上的 isPrototypeOf
用法:Array.prototype.isPrototypeOf(arr)
Array.prototype 属性表示 Array 构造函数的原型
其中有一个方法是 isPrototypeOf() 用于测试一个对象是否存在于另一个对象的原型链上。
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(Array.prototype.isPrototypeOf(arr)); // true
console.log(Array.prototype.isPrototypeOf(str)); // false
④Object.getPrototypeOf
用法:Object.getPrototypeOf(arr) === Array.prototype
Object.getPrototypeOf() 方法返回指定对象的原型
所以只要跟Array的原型比较即可
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
console.log(Object.getPrototypeOf(str) === Array.prototype); // false
⑤Object.prototype.toString
用法:Object.prototype.toString.call(arr) === '[object Array]'
虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了。
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true
console.log(Object.prototype.toString.call(str) === '[object Array]'); //false
⑥Array.isArray
用法:Array.isArray(arr)
ES5中新增了Array.isArray方法,IE8及以下不支持
Array.isArray ( arg )
isArray 函数需要一个参数 arg,如果参数是个对象并且 class 内部属性是 "Array", 返回布尔值 true;否则它返回 false。采用如下步骤:
如果 Type(arg) 不是 Object, 返回 false。
如果 arg 的 [[Class]] 内部属性值是 "Array", 则返回 true。
返回 false.
let str={"city":"武汉","city":"上海"}
let arr = [];
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(str)); // false
2993

被折叠的 条评论
为什么被折叠?



