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

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

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

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

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

5172 次点击
所在节点    JavaScript
34 条回复
fernandoxu
2019-12-06 09:38:33 +08:00
@rioshikelong121 应该就是从 c#抄来的
releaseme
2019-12-06 09:44:20 +08:00
@l1nyanm1ng js 里面也有 ?? 了,https://github.com/tc39/proposal-nullish-coalescing
结合 Optional Chaining 初步能达到 lodash.get 的功能,其实我觉得还是 lodash.get 好用(逃
imhxc
2019-12-06 09:48:03 +08:00
“实装” 啥意思?
pandaii
2019-12-06 09:52:49 +08:00
貌似 angular 还是 coffee 很早就有了,确实很好用
DOLLOR
2019-12-06 10:41:17 +08:00
@releaseme
@l1nyanm1ng

JS 的??跟_.get 的第三个参数不能等同,这个需要注意.

({a:null})?.a??'default'
=>'default'

_.get({a:null},'a','default')
=>null

这个才是等同的用法
_.defaultTo(_.get({a:null},'a'),'default')
=>'default'

@weixiangzhe

a?.b?.c,a 为 null 时并不会崩。
null?.b?.c
=>undefined

a 为 undefined 时并不会崩。
undefined?.b?.c
=>undefined
free9fw
2019-12-06 10:59:02 +08:00
我自己 polyfill 了一个自用
onfuns
2019-12-06 11:16:32 +08:00
es6 的结构可以啊,有点遗憾的只能是 undefined
liajoy
2019-12-06 11:45:53 +08:00
装 @babel/plugin-proposal-optional-chaining 是可以的
但是这玩意儿现在的开发体验不好,VSCode 的 TS 检查不支持,总是会提示错误
除非把 TS 检查关了,直接走 eslint 来做代码检查
weixiangzhe
2019-12-06 12:18:06 +08:00
@liajoy ts 有 a!.b!.c
duan602728596
2019-12-06 12:53:17 +08:00
babel 使用 babel-plugin-proposal-optional-chaining,typescript 大于等于 3.7 都已经可以用了。
如果是 ide 不支持,说明你的 ide 版本太低了,需要升级到新版本。
webstorm 很早就支持 a?.b?.c 语法和 a ?? b 语法了,webstorm2019.2 版本(也可能更早)也支持管道函数 a |> b |> c 语法了
webstorm2019.2 版本开始也支持 typescript 的 a ?? b 语法了
liajoy
2019-12-06 14:18:09 +08:00
@weixiangzhe a!.b!.c 是 non-null assertion operator,和 optional chaining 不太一样
releaseme
2019-12-06 16:17:00 +08:00
@DOLLOR
`({a:NaN})?.a??'default'`
>>> NaN

`_.defaultTo(_.get({a:NaN},'a'),'default')`
>>> default

🤦‍♀️,说到底还是判断条件不一致, emmmmmm
_.get 碰到 undefined 返回默认值
_.defaultTo 碰到 null || undefined || NaN 返回默认值
?? 碰到 null || undefined 返回默认值
.? 碰到 null || undefined 返回 undefined
luchenwei9266
2019-12-06 16:42:02 +08:00
Angular 表示早已实装....
jigi330
2019-12-07 13:56:49 +08:00
使用`Typescript 3.7`的 1 个月前已经用上了

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

https://yangjunhui.monster/t/626247

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

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

© 2021 V2EX