在 JS 中存在 "fn && fn() " 执行语句 这个语句有什么意义吗?

2020-06-23 11:53:46 +08:00
 VWMMWV

我在看别人代码的时候,有看到代码是这样写的

function(){
  fn&&fn()
}

大概意思是这么个意思,但是这我感觉这样写好像没意义,有带佬能指点一下吗

8419 次点击
所在节点    JavaScript
92 条回复
VWMMWV
2020-06-23 11:55:31 +08:00
要是 fn 不存在那肯定会直接报错 fn undefined ;要是 fn 存在;那直接执行 fn() 就好了
szq8014
2020-06-23 11:56:00 +08:00
只有有 fn 这个变量的时候才会当成函数执行,否则不执行,console 就不会报错了?
cjc2017
2020-06-23 11:56:03 +08:00
自抛自扣??
bojackhorseman
2020-06-23 11:56:45 +08:00
处理回调
seeker
2020-06-23 11:56:59 +08:00
if (fn) {
fn()
}
Perry
2020-06-23 12:01:41 +08:00
大部分情况是 1 楼这个意思,如果 fn 是 undefined 就不执行 fn()。React 针对 optional callback 会这么写。
VWMMWV
2020-06-23 12:11:57 +08:00
@seeker ok
ochatokori
2020-06-23 12:24:17 +08:00
@VWMMWV #1 错了,fn 不存在就什么都不做,不会报错,fn 存在才尝试执行 fn
rioshikelong121
2020-06-23 12:29:46 +08:00
短路。另外不会报错。
shenyu1996
2020-06-23 12:30:33 +08:00
if (fn) {
fn()
}
shenyu1996
2020-06-23 12:32:04 +08:00
没注意和 5 楼重复了 用 if 语句就更好理解了吧
dremy
2020-06-23 12:37:43 +08:00
这种不标准的写法完全是负分,竟然还有人用来装 B…
xiangyuecn
2020-06-23 12:41:22 +08:00
@dremy #12 在 js 里面,这是标准的。大幅减少代码量,比三目运算更直接了当。别的语言大同小异:fn?.xx()
Perry
2020-06-23 12:42:17 +08:00
@dremy 这个扯不上装吧,React 的 JSX 里面经常这么些。
dremy
2020-06-23 12:50:30 +08:00
@xiangyuecn 大幅减少代码量?可读性的下降之后,代码量的减少有意义吗?这分明是不能区分判断语句和条件表达式的区别导致的

与其:
abc && fn && fn(abc)

不如:
if (abc && fn) {
fn(abc)
}
dremy
2020-06-23 12:53:48 +08:00
@Perry React JSX 里面的标准写法应该是这样

<div>
{fn ? fn(abc) : null}
</div>
chiu
2020-06-23 12:54:54 +08:00
短路, bash 里常见
northernlights
2020-06-23 13:00:20 +08:00
不会报错,fn 即!!fn 。这个写法通常在回调里用。有 fn 就执行 fn
Perry
2020-06-23 13:01:57 +08:00
@dremy 那是你们组的标准不是所有人的标准,fn && fn(abc) 也是可以的
xiangyuecn
2020-06-23 13:02:31 +08:00
@dremy #15 比三目运算更直接了当:可读性更好的意思😏

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

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

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

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

© 2021 V2EX