判断数组的方式

... 2025-7-10 JavaScript
  • 数据类型
大约 1 分钟

  • instanceof 操作符判断

    instanceof 主要是用来判定某一个对象是否是某一个构造函数的实例

function obj() {}

let o1 = new obj()

console.log(o1 instanceof obj) // true
1
2
3
4
5
  • 对象构造函数的 constructor 判断

    Object 的每个实例都有构造函数 constructor,用于保存着用于创建当前对象的函数

function obj() {}

let o1 = new obj()

console.log(o1.constructor === obj) // true
1
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
  • 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
  • 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
  • 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
上次编辑于: 2025年7月10日 04:01
贡献者: HugStars