请教一下一个使我震惊的 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 进行页面渲染时的&&或者?:

当然,我自己的这些肤浅猜测总结也没什么营养,还请各位有了解或者感兴趣的分析一波这个?.吗
15622 次点击
所在节点    Node.js
106 条回复
mrleft
2020-04-16 18:03:06 +08:00
g00001
2020-04-16 18:03:18 +08:00
c# 6.0 ( 2015 年) 才有 Null 条件运算符,应当是比较晚了。

国产小语言 aardio 在十多年前就有了类似的语法,不仅仅是对象,任何对象都可以 if( a[[b]] ){ } ,真正的有鸭子的声音就可以当鸭子用,说到偷懒这个事,我们还是行的。

只能 null 对象,还是会有麻烦,如果是其他类型呢,还是要写判断,偷懒还是不够彻底这不行的。
jin7
2020-04-16 18:10:10 +08:00
php 早就有了
ansenJ
2020-04-16 18:26:25 +08:00
ES7+后的新语法 我知道有 但是不知道在哪个版本里
optional
2020-04-16 18:41:46 +08:00
js 生态就要经常上来看看 tc39,ts 可以经常看看 roadmap
ccyu220
2020-04-16 18:45:08 +08:00
除了 ts , 暂时还不敢用。
g00001
2020-04-16 18:45:17 +08:00
PHP 就更晚了,PHP 7 才有 $d = $a->$b->$c ?? 'DEFAULT' 的写法,不是很简洁。
chouchoui
2020-04-16 18:48:04 +08:00
C#基本操作,ts 也有
xrr2016
2020-04-16 18:50:37 +08:00
Dart 里面经常用...还有 ?? 语法 😝
Chingim
2020-04-16 18:53:42 +08:00
多关注 tc39
en20
2020-04-16 19:00:49 +08:00
最近写 flutter,看别人的库经常这种语法
overflow99
2020-04-16 19:13:54 +08:00
很有用 学习了
mingtianjiayou
2020-04-16 19:53:45 +08:00
新语法哈哈
nekochyan
2020-04-16 19:59:11 +08:00
没记错的话是 es7 新语法吧,一般情况下不敢用,怕不支持😄
shenyu1996
2020-04-16 20:11:43 +08:00
最近新开项目 下意识在使用 ?. ... 这些语法
说真的 能少掉好多头发 少些好多代码
xg4
2020-04-16 20:12:59 +08:00
@nekochyan 已经纳入标准,可以用 babel 进行兼容处理
shenyu1996
2020-04-16 20:15:32 +08:00
```
{
name: 'aaa',
...(true && {age: 10})
}
```

比如像这种神奇的写法 真的能让自己少掉好几根头发
Felldeadbird
2020-04-16 20:36:29 +08:00
我印象中 PHP7 也有这种语法。但是我还是喜欢用传统的:?判断为主。 太新的语法我怕其他人调式出错。就蒙蔽了。
cnit
2020-04-16 20:53:49 +08:00
thymeleaf 里面经常会用到
cbais7890
2020-04-16 20:57:45 +08:00
可选链啊, 如果用过 Swift 肯定会觉得很熟悉
实际上 a?.b 就等于 a && a.b 的意思, 防止对不存在的变量读取属性而产生异常
在处理某些前后端交互的不稳定数据时相当舒服

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

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

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

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

© 2021 V2EX