请教一下一个使我震惊的 js 语法 ?.(没错,看起来很像三目但却不是:而是.)

2020-04-16 14:29:18 +08:00
 devwolf
举例
let a = {a:"1",b:"2"}
console.log(a?.a)

契机:另一个组的同事在一个 angular 项目里发现了这个语法的使用,
通过关键字查了一下也就这么个 csdn 的结果
《 angular 中的 ? 和 !》 https://blog.csdn.net/weixin_30908941/article/details/95594290

里面除了交代?可以判断前面的变量是否为 null 或 undefined 再执行后面,还有个!判断后面键所对应的值是否为 null 或 undefined,不过没有成功在 js 里再现这个!。

就我个人在网上的搜索结果来看,感觉这个?.的写法比!!还要冷门,用途的效果上个人感觉类似 react 写 jsx 进行页面渲染时的&&或者?:

当然,我自己的这些肤浅猜测总结也没什么营养,还请各位有了解或者感兴趣的分析一波这个?.吗
15280 次点击
所在节点    Node.js
106 条回复
redam
2020-04-16 16:08:00 +08:00
@luob 啊,老哥一般是在哪里了解这些新内容的?
devwolf
2020-04-16 16:09:24 +08:00
@lithbitren
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
摘录:
由于 || 是一个布尔逻辑运算符,左侧的操作数会被强制转换成布尔值用于求值。任何假值( 0, '',NaN,null,undefined )都不会被返回。这导致如果你使用 0,''或 NaN 作为有效值,就会出现不可预料的后果.
空值合并操作符??可以避免这种陷阱,其只在第一个操作数为 null 或 undefined 时(而不是其它假值)返回第二个操作数。

感谢#10 提供了拓展和线索
lithbitren
2020-04-16 16:13:49 +08:00
@devwolf 蟹蟹,MDN 常看常新啊
Ritter
2020-04-16 16:35:34 +08:00
666
gromit1337
2020-04-16 16:37:56 +08:00
@vivipure #11 对对
iugo
2020-04-16 16:44:37 +08:00
VS Code + TypeScript 会给我强推这种写法.
iugo
2020-04-16 16:46:38 +08:00
iugo
2020-04-16 16:48:23 +08:00
推一下前两天我们关于 nullish coalescing operator post: https://zsqk.github.io/news/2020-04-08-nullish-coalescing-operator.html
klgd
2020-04-16 16:54:40 +08:00
上次遇见了一次,搜了半天才知道是干什么的
还有`!!`
ZZITE
2020-04-16 17:07:47 +08:00
Optional Chaining
去年写的 ts 项目就在用了,在 react 项目中很舒服。
lneoi
2020-04-16 17:10:46 +08:00
这是新语法啦,很实用的
AlynxZhou
2020-04-16 17:11:51 +08:00
看起来楼主没写过 coffeescript 啊,coffeescript 里面有这个问号运算符
jtwor
2020-04-16 17:13:36 +08:00
c# 空运算
Rwing
2020-04-16 17:14:32 +08:00
很棒的语法啊,c#首创的吧?
luzemin
2020-04-16 17:20:43 +08:00
C#的语法糖
est
2020-04-16 17:23:27 +08:00
ruby 里可以直接 inline 外挂一个 exception 更方便。不管是 . 挂了还是别的什么挂了都能正常执行。
xuchdeid
2020-04-16 17:28:35 +08:00
TypeScript 啊 。。。
IllBeBack
2020-04-16 17:30:15 +08:00
相当于 Ruby 的单身狗运算符 a&.a

ruby-china.org/topics/30415
ershierdu
2020-04-16 17:42:25 +08:00
学 swift 的时候感觉这个有点绕,项目做完后不再写 swift 就忘了
wszgrcy
2020-04-16 17:55:16 +08:00
ts 3.7 的语法吧

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

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

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

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

© 2021 V2EX