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

为何通过await访问异步函数返回对象的属性时会得到undefined?

问题原因说明

这个现象是代码书写时忽略了运算符优先级和异步函数返回值特性导致的,不属于JavaScript语法不一致。

  • 首先明确返回值差异:
    普通同步自执行函数执行后直接返回你定义的{a: 'as', b: 'boot'}对象,所以goo就是这个普通对象,直接访问.a/['a']都正常。
    而async函数无论返回什么值,都会被自动包装为Promise实例,你代码里的go变量存的就是这个Promise实例,不是你return的那个包含a、b属性的对象。
  • 其次是运算符优先级问题:
    JavaScript中成员访问符.的优先级高于await关键字,所以你写的await go.a实际执行顺序是:
  1. 先执行go.a:go是Promise实例,本身没有a属性,所以这一步取值为undefined
  2. 再执行await undefined:await对非Promise值会直接原值返回,所以最终输出undefined

正确写法

有两种可正常取到属性的写法:

  1. 先把Promise的结果await出来存为变量,再访问属性:
const goRes = await go;
console.log("console.log 2.5:", goRes.a);
console.log("console.log 2.75:", goRes["a"]);
  1. 用括号改变运算顺序,让await go先执行拿到返回对象,再访问属性:
console.log("console.log 2.5:", (await go).a);
console.log("console.log 2.75:", (await go)["a"]);

内容的提问来源于stack exchange,提问作者JohnyClash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:36:03