JS判断数组的7种方式

let arr = []

1.  instanceof 

    arr  instanceof Array

2. __proto__

    arr.__proto__  === Array.prototype

3.isPrototypeOf
     Array.prototype.isPrototypeOf(arr)

4. constructor

    arr.constructor === Array

5. constructor.name
     arr.constructor.name === "Array"

6. Object.prototype.toString

   Object.prototype.toString.call(arr) === '[object Array]'

7. Array.isArray

    Array.isArray(arr)

其中方法1,2 ,3主要是通过原型去判断的,4,5是通过构造函数判断, 6是通过object类型的副属性class去判断的,其中函数的class是Function,结果是[object Function], 普通的对象是Object,结果是[object Object],7是es6新增的方法

### JavaScript 判断变量是否为数组的方法 在 JavaScript 中,有多种方式可以用来检测一个变量是否为数组类型。以下是常见的几种方法及其特点: #### 方法一:`Array.isArray()` 这是最推荐的方式之一,因为它简单直观且兼容性强。通过调用 `Array.isArray()` 函数可以直接判断传入的对象是否是一个数组。 ```javascript let arr = [1, 2, 3]; console.log(Array.isArray(arr)); // true ``` 这种方法被广泛支持于现代浏览器环境以及 Node.js 平台中[^2]。 --- #### 方法二:`Object.prototype.toString.call()` 此方法利用了 `Object.prototype.toString` 的特性,能够获取到目标对象的具体内部类名(即 `[object Type]` 形式的字符串)。对于数组来说,它会返回 `[object Array]`。 ```javascript let arr = [1, 2, 3]; console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true ``` 这种方式的优点在于它的通用性和跨平台稳定性,在某些老旧环境中可能更为可靠[^4]。 --- #### 方法三:构造函数比较 (`constructor`) 可以通过对比变量的构造器与标准 `Array` 构造器来进行验证。然而需要注意的是,当涉及多窗口或多 iframe 场景下时,该方法可能会失效,因为不同上下文中创建的数组实例拥有不同的构造器。 ```javascript let arr = [1, 2, 3]; console.log(arr.constructor === Array); // true ``` 尽管如此,在单一页面应用或者常规脚本运行环境下,这种技术仍然有效[^1]。 --- #### 方法四:`instanceof` 运算符 虽然严格意义上讲这不是最佳实践,但在特定场景下也可以借助 `instanceof` 来完成这项任务。不过同样要注意跨文档域问题的影响。 ```javascript let arr = [1, 2, 3]; console.log(arr instanceof Array); // true ``` 注意这里的局限性主要体现在跨框架操作上。 --- #### 需要避免的情况:使用 `typeof` 由于历史原因,JavaScript 设计之初并未区分普通对象和特殊集合型数据结构如数组之间的差异,因此单纯依靠 `typeof` 将始终得到 `'object'` 结果而非预期中的 `'array'`。 ```javascript let arr = [1, 2, 3]; console.log(typeof arr); // 'object' ``` 这表明单独依赖 `typeof` 不足以满足需求[^3]。 --- ### 总结 综上所述,针对大多数情况建议优先采用 `Array.isArray()` 或者基于 `toString` 调用的方式来实现这一功能;而对于更复杂的应用场合,则需综合考虑具体业务逻辑并选取合适的判定手段。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值