You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:36:19