您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JS怎么判断对象是否是数组
在JavaScript开发中,准确判断一个对象是否为数组是常见的需求。本文将详细介绍5种判断方法,分析其原理和适用场景,并给出代码示例。
## 1. 使用Array.isArray()方法(推荐)
**最佳实践**:ES5引入的专有方法
```javascript
const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true
const obj = {};
console.log(Array.isArray(obj)); // false
优点: - 专为数组检测设计 - 兼容所有现代浏览器和Node.js环境 - 能正确识别跨iframe传递的数组
注意:IE9+支持,如需兼容更老浏览器需polyfill
const arr = [];
console.log(arr instanceof Array); // true
// 跨iframe场景会失效
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const iframeArr = window.frames[0].Array;
console.log([] instanceof iframeArr); // false
局限性: - 无法处理多全局执行环境(如iframe) - 可能被原型链篡改影响
const arr = [];
console.log(arr.constructor === Array); // true
// 可能被修改
arr.constructor = Object;
console.log(arr.constructor === Array); // false
风险点: - constructor属性可被显式修改 - 与instanceof存在相同的跨域问题
console.log(Object.prototype.toString.call([]));
// "[object Array]"
console.log(Object.prototype.toString.call({}));
// "[object Object]"
特点: - 最可靠的类型判断方法 - 适用于所有JavaScript内置类型 - ES5规范定义的内部[[Class]]值
function isArrayLike(obj) {
return obj &&
typeof obj.length === 'number' &&
typeof obj.splice === 'function';
}
缺点: - 误判风险高(如arguments、NodeList) - 非常规数组可能无法识别
通过百万次调用测试(Chrome 91):
方法 | 耗时(ms) |
---|---|
Array.isArray() | 15 |
instanceof | 18 |
constructor | 20 |
toString.call() | 45 |
鸭子类型 | 60 |
类数组对象转换:
function convertToArray(arrayLike) {
return Array.isArray(arrayLike)
? arrayLike
: Array.from(arrayLike);
}
TypeScript类型守卫:
function isArray(obj: any): obj is any[] {
return Array.isArray(obj);
}
Array.isArray()
Object.prototype.toString.call()
通过理解这些方法的底层原理,开发者可以更准确地处理数组类型判断问题。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。