判断数组的方式
... 2025-7-10 大约 1 分钟
instanceof 操作符判断
instanceof 主要是用来判定某一个对象是否是某一个构造函数的实例
function obj() {}
let o1 = new obj()
console.log(o1 instanceof obj) // true
1
2
3
4
5
2
3
4
5
对象构造函数的 constructor 判断
Object 的每个实例都有构造函数 constructor,用于保存着用于创建当前对象的函数
function obj() {}
let o1 = new obj()
console.log(o1.constructor === obj) // true
1
2
3
4
5
2
3
4
5
Array 原型链上的 isPrototypeOf
Array.prototype 属性表示 Array 构造函数的原型
其中有一个方法是 isPrototypeOf() 用于测试一个对象是否存在于另一个对象的原型链上。
let str = { city: '武汉', city: '上海' }
let arr = []
console.log(Array.prototype.isPrototypeOf(arr)) // true
console.log(Array.prototype.isPrototypeOf(str)) // false
1
2
3
4
5
6
7
2
3
4
5
6
7
Object.getPrototypeOf
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
1
2
3
4
5
6
7
2
3
4
5
6
7
Object.prototype.toString
虽然 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
1
2
3
4
5
6
7
2
3
4
5
6
7
Array.isArray (ES6 新增)
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
1
2
3
4
5
6
7
2
3
4
5
6
7