TypeScript中如何检查对象属性并通过键名访问属性?
TypeScript/JavaScript 属性访问与存在性检查问题
先看你给出的代码:
const myObj = { "name": "Johnny", "age": 29 } const accessProperty = (key : string) => { if(key in Object.keys(myObj)) { // TODO: access myObj.key... } }
1. 如何访问myObj中由key表示的属性?
要用方括号访问语法:myObj[key]。
点语法myObj.key在这里不适用,因为点语法里的key是作为字面量属性名解析的,会去查找myObj上名为key的属性,而不是你传入的变量key的值对应的属性。比如当key是"name"时,myObj[key]就等价于myObj.name,能正确拿到对应的值。
2. 这种检查key是否为myObj属性的方式是否正确?
这种写法不正确。
Object.keys(myObj)会返回包含对象自身可枚举属性名的数组,比如这里是["name", "age"]。而key in 数组的逻辑是检查key是否是数组的索引(比如"0"、"1"这类字符串形式的数字),并非检查key是否是数组里的元素,所以你的判断逻辑完全错误。
正确的检查方式有两种:
- 直接用
key in myObj:会检查对象自身及继承的属性(若只需检查自身属性,可结合hasOwnProperty) - 用
Object.keys(myObj).includes(key):通过数组的includes方法判断属性名是否在对象自身的属性名列表里
调整后的示例代码:
const accessProperty = (key : string) => { if(key in myObj) { const value = myObj[key]; // 后续逻辑 } }
或仅检查自身属性的版本:
const accessProperty = (key : string) => { if(myObj.hasOwnProperty(key)) { const value = myObj[key]; // 后续逻辑 } }
内容的提问来源于stack exchange,提问作者Aviram Shubeili
相关产品推荐
相关产品推荐

