Array.isArray()学习

Array.isArray()学习
最新回答
下一站等候

2021-07-05 19:29:10

Array.isArray() 方法详解

答案:Array.isArray() 方法用于确定传递的值是否是一个 Array。

基本用法

  • 当传递的值是一个数组时,Array.isArray() 返回 true。
  • 当传递的值不是一个数组时,Array.isArray() 返回 false。

详细解释

  1. 检测普通数组

    Array.isArray([]) 返回 true。空数组也是数组。

    Array.isArray([1]) 返回 true。包含一个元素的数组。

  2. 检测使用 new Array() 创建的数组

    Array.isArray(new Array()) 返回 true。使用 new Array() 创建的空数组。

    Array.isArray(new Array('a', 'b', 'c', 'd')) 返回 true。使用 new Array() 创建并包含多个字符串元素的数组。

    Array.isArray(new Array(3)) 返回 true。使用 new Array(3) 创建了一个长度为3的空数组(注意,这里并没有填充任何元素,只是指定了数组的长度)。

  3. 检测 Array.prototype

    Array.isArray(Array.prototype) 返回 true。这是一个较少为人知的事实,Array.prototype 本身也是一个数组(尽管它是一个空数组,并且主要用于为所有数组对象提供共享的方法和属性)。

  4. 检测非数组值

    Array.isArray() 在没有参数的情况下调用(Array.isArray())返回 false。因为没有传递任何值。

    Array.isArray({}) 返回 false。普通对象不是数组。

    Array.isArray(null) 返回 false。null 不是数组。

    Array.isArray(undefined) 返回 false。undefined 不是数组。

    Array.isArray(17) 返回 false。数字不是数组。

    Array.isArray('Array') 返回 false。字符串不是数组。

    Array.isArray(true) 和 Array.isArray(false) 都返回 false。布尔值不是数组。

    Array.isArray(new Uint8Array(32)) 返回 false。Uint8Array 是一个类型化数组,不是普通数组。

    Array.isArray({ __proto__: Array.prototype }) 返回 false。尽管这个对象的原型被设置为 Array.prototype,但它本身仍然是一个普通对象,不是数组。

重要特性

  • Array.isArray() 能够正确识别跨 iframe 创建的数组。这意味着,即使数组是在不同的全局执行上下文中创建的(例如,在不同的 iframe 中),Array.isArray() 也能正确地识别它们为数组。
  • Array.isArray() 不会受到对象伪装成数组的影响。即使一个对象通过修改其原型链或添加数组的方法(如 push、pop 等)来模仿数组的行为,Array.isArray() 仍然能够准确地识别出它不是一个真正的数组。

示例图片

这些图片展示了 Array.isArray() 方法在不同情况下的使用示例,包括检测普通数组、使用 new Array() 创建的数组、以及非数组值。通过这些示例,可以更直观地理解 Array.isArray() 方法的工作原理和用途。