如何用 in 操作符检测属性是否存在于对象或原型链上
in操作符检测属性名是否存在于对象自身或原型链中返回布尔值它只关心属性是否存在不关心值是否为undefined、null或是否可枚举。in 操作符用于检测**属性名是否存在于对象自身或其原型链的任意一级上**返回布尔值。它检查的是“属性是否存在”不关心属性是否可枚举、是否为 undefined甚至不关心属性值是否为 null 或 undefined。语法和基本行为propertyName in object —— propertyName 必须是字符串或可转为字符串的值object 是目标对象。只要该属性名在对象自身或任意原型包括 Object.prototype上有定义就返回 true 即使属性值是 undefined只要它被声明过例如 obj.prop undefined 或通过 Object.defineProperty 设置prop in obj 仍为 true toString in {} → true继承自 Object.prototype hasOwnProperty in {} → true也是继承来的与 hasOwnProperty() 的关键区别in 查整个原型链obj.hasOwnProperty(prop) 只查对象**自身**不包括原型。toString in {} → true但 {}.hasOwnProperty(toString) → false 若只想确认某属性是对象“自己拥有”的必须用 hasOwnProperty注意需用 Object.prototype.hasOwnProperty.call(obj, prop) 避免对象自身重写了该方法常见易错点容易混淆的不是“值是否为 undefined”而是“属性是否存在”。以下都返回 true 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台