javascript in运算符是什么_如何检查对象是否包含属性?

16次阅读

in运算符用于检查属性名是否存在于对象或其原型链中,返回布尔值;它只判断键是否存在,不关心值,且要求左侧为字符串形式的属性名。

javascript in运算符是什么_如何检查对象是否包含属性?

in 运算符用于检查某个属性名是否存在于对象(包括原型链)中,返回布尔值。它不看属性值,只看“键是否存在”,而且会沿着原型链向上查找。

in 运算符的基本用法

语法是:propertyName in Object。左边是字符串形式的属性名(可以是变量或字面量),右边是要检查的对象。

  • 如果属性在对象自身或其原型链上存在,结果为 true
  • 即使属性值为 NULLundefinedfalse,只要键存在,就返回 true
  • 注意:属性名必须是字符串;写成 obj.prop in obj 是错的,要写成 "prop" in obj

in 和 hasOwnProperty() 的区别

in 查的是整个原型链,而 obj.hasOwnProperty("prop") 只检查对象自身是否有该属性,不查原型。

  • 比如 "toString" in {}true继承Object.prototype),但 {}.hasOwnProperty("toString")false
  • 需要严格判断“自有属性”时,优先用 hasOwnProperty() 或更现代的 Object.hasOwn(obj, "prop")(推荐,ES2022 新增,更安全)

实际使用建议

根据需求选择合适的方法:

立即学习Java免费学习笔记(深入)”;

  • 只想知道“这个对象能不能用这个属性”,比如做兼容性判断("fetch" in window),用 in 很自然
  • 要区分继承属性和自有属性,避免意外匹配到原型方法,就别用 in,改用 Object.hasOwn(obj, key)
  • 不要用 in 检查数组索引是否“有值”,比如 1 in [undefined, 2]true,但对应位置值是 undefined;这时更适合用 Array[1] !== undefinedarray.length > 1

常见误区提醒

容易混淆的点:

  • in 检查的是属性名,不是属性值。想查值是否存在,不能靠它
  • nullundefined 使用 in 会报错,使用前需确保对象有效
  • for…in 循环里,in 是语法的一部分,和这里的 in 运算符同名但语境不同,别混为一谈
text=ZqhQzanResources