in运算符用于检查属性名是否存在于对象或其原型链中,返回布尔值;它只判断键是否存在,不关心值,且要求左侧为字符串形式的属性名。
in 运算符用于检查某个属性名是否存在于对象(包括原型链)中,返回布尔值。它不看属性值,只看“键是否存在”,而且会沿着原型链向上查找。
语法是:propertyName in object。左边是字符串形式的属性名(可以是变量或字面量),右边是要
检查的对象。
true
null、undefined 或 false,只要键存在,就返回 true
obj.prop in obj 是错的,要写成 "prop" in obj
in 查的是整个原型链,而 obj.hasOwnProperty("prop") 只检查对象自身是否有该属性,不查原型。
"toString" in {} 是 true(继承自 Object.prototype),但 {}.hasOwnProperty("toString") 是 false
hasOwnProperty() 或更现代的 Object.hasOwn(obj, "prop")(推荐,ES2025 新增,更安全)根据需求选择合适的方法:
"fetch" in window),用 in 很自然in,改用 Object.hasOwn(obj, key)
in 检查数组索引是否“有值”,比如 1 in [undefined, 2] 是 true,但对应位置值是 undefined;这时更适合用 array[1] !== undefined 或 array.length > 1
容易混淆的点:
in 检查的是属性名,不是属性值。想查值是否存在,不能靠它null 或 undefined 使用 in 会报错,使用前需确保对象有效in 是语法的一部分,和这里的 in 运算符同名但语境不同,别混为一谈