in运算符用于检查属性名是否存在于对象或其原型链中,返回布尔值;它不关心属性值,且右侧必须为对象,否则报错;与for...in语句及hasownproperty方法有本质区别。

in 运算符用于检查某个属性名是否存在于对象(或其原型链)中,它判断的是“属性是否存在”,而不是“属性是否有值”或“是否为自有属性”。
in 检查的是属性名(字符串),不是属性值
左边是字符串(属性名),右边是对象。只要该属性名在对象自身或其原型链上存在,就返回 true。
-
'toString' in {}→ true(继承自Object.prototype) -
'length' in 'hello'→ true(字符串原型上有length) -
'foo' in { foo: undefined }→ true(属性存在,即使值是undefined) -
'bar' in { foo: 1 }→ false(属性名不存在)
in 包含原型链,区别于 hasOwnProperty()
in 会沿着原型链向上查找;而 obj.hasOwnProperty(prop) 只检查对象自身的属性。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
'toString' in {}是 true,但{}.hasOwnProperty('toString')是 false - 若只想确认是否为“自有属性”,用
Object.hasOwn(obj, prop)(推荐,ES2022+)或obj.hasOwnProperty(prop)
注意:in 对 null 或 undefined 会报错
右边操作数必须是对象(或能被强制转为对象的值,如数组、字符串、函数等)。不能直接对 null 或 undefined 使用。
-
'x' in null→ TypeError -
'x' in undefined→ TypeError - 安全写法:
obj != null && 'x' in obj,或先做类型判断
常见误用:混淆 in 和 for...in
in 是运算符,返回布尔值;for...in 是语句,用于遍历可枚举属性(含原型链上的)。两者目标不同:
-
'name' in user→ 判断有没有name属性 -
for (let key in user) { ... }→ 遍历所有可枚举属性名 -
for...in不保证顺序,且会遍历继承来的可枚举属性,通常需配合hasOwnProperty过滤
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










