判断动态属性存在应优先使用in、hasOwnProperty或Reflect.has:in检测含原型链的属性,hasOwnProperty严格检查自身属性(推荐Object.prototype.hasOwnProperty.call),Reflect.has语义清晰且对null/undefined报错;避免用obj[computedKey] !== undefined以防undefined值误判。
直接用 in 运算符或 hasOwnProperty 方法配合方括号语法即可,关键在于把计算结果作为字符串传进去,而不是写死属性名。
适合判断属性是否存在,不管是不是对象自身拥有,包括继承来的属性。
computedKey in obj,其中 computedKey 是字符串类型的结果const key = 'user' + id; if (key in data) { ... }
key 必须是字符串;若为数字或 symbol,in 会自动转成字符串(数字会转,symbol 不会,会报错)适合严格检查对象是否“自己定义”了该属性,排除原型链干扰。
obj.hasOwnProperty(computedKey)
Object.prototype.hasOwnProperty.call(obj, computedKey),避免对象自身重写了 hasOwnProperty
const field = `${type}Count`; if (Object.prototype.hasOwnProperty.call(config, field)) { ... }
ES6 新增的 API,行为等价于 in,但更函数式,且明确要求第一个参数是对象。
Reflect.has(obj, computedKey)
obj 为 null 或 undefined 而静默失败,而是直接抛错,利于调试别用 obj[computedKey] !== undefined 来判断——如果属性值恰好是 undefined,就会误判为“不存在”。
const user = { name: undefined }; const k = 'name'; user[k] !== undefined // false,但属性确实存在
in、hasOwnProperty 或 Reflect.has
computedKey 是字符串:可加 String(key) 或模板字面量兜底从安装到连通:用 Grok Bot 云电脑与插件搭建 X 助手
ubuntu系统怎么查看版本? Linux查看系统版本信息的技巧
ADK for Kotlin 上手:Google 官方 AI Agent 开发指南
ubuntu21.04系统怎么自定义分区安装?
ubuntu21.04录屏工具无法使用怎么办? ubuntu录屏工具的用法
ubuntu21.04不能播播放rmvb文件怎么办? ubuntu播放rmvb视频的技巧