2026-10-30 18:48:29
在 JavaScript 中,判断一个值是否为数组时,Array.isArray() 和 instanceof 是两种常见方法,但它们的行为和适用场景有显著差异。以下是详细对比:
1. Array.isArray():首选方法跨环境安全:在多全局环境(如 iframe、不同 window 实例)中仍能正确识别数组。
抗干扰:不受对象原型或 constructor 属性修改的影响。
全面支持:对字面量数组([])、new Array() 或 Array.from() 创建的数组均返回 true。
多全局环境失效:不同 iframe 或 window 中的 Array 构造函数不同,导致误判。
原型修改风险:若手动修改对象的原型链(如 obj.__proto__ = {}),结果可能错误。
优点:同样跨环境安全,适用于所有类型检测(如 Date、RegExp)。
缺点:语法冗长,可读性较差。现代开发中,Array.isArray() 更简洁。
通过理解这些差异,可以编写更健壮、兼容性更强的代码。