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() 方法的工作原理和用途。