最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何检查对象是否包含动态计算出来的属性名
时间:2026-06-24 10:00:45 编辑:袖梨 来源:一聚教程网
判断动态属性存在应优先使用in、hasOwnProperty或Reflect.has:in检测含原型链的属性,hasOwnProperty严格检查自身属性(推荐Object.prototype.hasOwnProperty.call),Reflect.has语义清晰且对null/undefined报错;避免用obj[computedKey] !== undefined以防undefined值误判。
直接用 in 运算符或 hasOwnProperty 方法配合方括号语法即可,关键在于把计算结果作为字符串传进去,而不是写死属性名。
用 in 运算符检测(含原型链)
适合判断属性是否存在,不管是不是对象自身拥有,包括继承来的属性。
- 语法:
computedKey in obj,其中computedKey是字符串类型的结果 - 例如:
const key = 'user' + id; if (key in data) { ... } - 注意:
key必须是字符串;若为数字或 symbol,in会自动转成字符串(数字会转,symbol 不会,会报错)
用 hasOwnProperty 检测(仅自身属性)
适合严格检查对象是否“自己定义”了该属性,排除原型链干扰。
- 语法:
obj.hasOwnProperty(computedKey) - 推荐加一层防护:
Object.prototype.hasOwnProperty.call(obj, computedKey),避免对象自身重写了hasOwnProperty - 例如:
const field = `${type}Count`; if (Object.prototype.hasOwnProperty.call(config, field)) { ... }
用 Reflect.has(现代、语义清晰)
ES6 新增的 API,行为等价于 in,但更函数式,且明确要求第一个参数是对象。
- 语法:
Reflect.has(obj, computedKey) - 好处:不会因
obj为null或undefined而静默失败,而是直接抛错,利于调试 - 不支持 symbol 作为 key(除非显式用 Symbol 类型变量),但对字符串计算结果完全友好
避开常见坑
别用 obj[computedKey] !== undefined 来判断——如果属性值恰好是 undefined,就会误判为“不存在”。
- 错误示例:
const user = { name: undefined }; const k = 'name'; user[k] !== undefined // false,但属性确实存在 - 正确做法始终用
in、hasOwnProperty或Reflect.has - 确保
computedKey是字符串:可加String(key)或模板字面量兜底
相关文章
- 丁墨小说全集在线阅读 - 2026热门言情推理作品 06-25
- 电商价格战背后的逻辑与影响 - 2026年深度解析 06-25
- 黑色星期五对跨境电商的影响分析 - 2026年最新趋势解读 06-25
- 蓝瘦香菇是什么意思 - 2026网络流行语解析 06-25
- 多特网 - 专业IT技术资讯与软件下载平台 06-25
- 百度理财APP下载安装 - 2026官方正版手机应用 06-25