JavaScript 判断 undefined 的符号什么时候实装?

2019-12-05 16:31:29 +08:00
 Robbbbbb

之前看到一个新特性介绍,很心动 说是可以用?.来规避从 undefined 对象中取值的错误 例如

console.log(data.user?.address?.street) //undefined

这个特性什么时候准备实装? 或者现在有什么方式可以编译这个语法吗? 平常业务中确实很需要这个特性。

5075 次点击
所在节点    JavaScript
34 条回复
bnm965321
2019-12-05 16:37:22 +08:00
CRA3.3 已经支持

其它情况需要自己设置 babel 插件
l1nyanm1ng
2019-12-05 16:38:20 +08:00
这个是可选链语法 optional chaining 吧,在 swift 和 kotlin 中都已经实装了,es 现在这个规范还在提案阶段,与其期待 es 将这个规范实装,不如期待 ts 赶紧上,不过用 babel 也可以预编译享受这个新特性,使用 @babel/plugin-proposal-optional-chaining
shintendo
2019-12-05 16:38:28 +08:00
没记错的话还在 stage 2
qdwang
2019-12-05 16:40:06 +08:00
这种功能其实和报错一样,除非你确实需要用到 undefined
murmur
2019-12-05 16:42:15 +08:00
已经用第三方组件访问很深的 object 了,除了性能会有丁点影响,不觉得很心动
hua123s
2019-12-05 16:42:46 +08:00
data&&data.user&&data.user.address&&data.user.address.street 其实这样写更美观 (捂脸)
Robbbbbb
2019-12-05 16:44:46 +08:00
@l1nyanm1ng 好的,谢谢,我去试一下
bnm965321
2019-12-05 16:45:26 +08:00
@l1nyanm1ng ts3.7 已经支持了
bnm965321
2019-12-05 16:45:45 +08:00
@shintendo 已经进入 stage3,ts3.7 已经支持这个特性
l1nyanm1ng
2019-12-05 16:46:52 +08:00
不介意的话用 lodash 也可以减少 undefined 和 null 的判断
```javascript
import _ from 'lodash';
const street = _.get(data, ['user', 'address', 'street'])
```
lodash#get 第三个参数可以设置,在这个 object 访问链返回 undefined 时的 fallback,相当于 swift 的 data.user?.address?.street ?? "fallback"
rioshikelong121
2019-12-05 17:09:09 +08:00
用 lodash 规避即可。 这个语法形式看着和.net 的挺像。
virtual2019
2019-12-05 17:25:18 +08:00
最新的 chrome dev 已经支持了
zhixuanziben
2019-12-05 20:10:53 +08:00
lodash.get 可以替代这个,或者就直接上 ts3.7
a4854857
2019-12-05 20:26:55 +08:00
lodash 在使用 vue 的时候写在 html 模板就不那么好看了...求支招
weixiangzhe
2019-12-05 23:17:39 +08:00
还是用 lodash 的 get 吧
molvqingtai
2019-12-06 01:19:17 +08:00
babel
weixiangzhe
2019-12-06 07:28:02 +08:00
这东西不靠谱 对于 a.b.c 后台经常返回 a 为 null, 然后又崩了
Pastsong
2019-12-06 08:11:27 +08:00
基本上已经进 ES2020 标准了,什么时候实装要看各引擎厂商
vipcc
2019-12-06 09:07:07 +08:00
C#已经支持
releaseme
2019-12-06 09:37:08 +08:00
@shintendo 昨天看推上一位 TC39 成员说 stage 4 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/626247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX