如果回调函数不为空,Javascript的一种简写方式是什么?

6

If we have:

(cb)=>{ if (cb!=null) cb()}

有没有更简单的方法来检查cb不为空并调用它?这将在Node上运行。


10
记录一下,好的代码并不是越短越好,而是越易读懂越好。 - Sterling Archer
同意,这样做没有任何问题。 - Pointy
这段代码的语法有误。 - Phiter
3
可以使用简单的 if (cb) cb(),但更好的写法是 if (typeof cb=="function") cb()。可以说,无论如何都不要使用可选的回调参数。 - Bergi
1
cb?.() - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining - riv
2个回答

10
现在在2021年: 可选链
cb?.()

如果 cb 是 null,则不会触发cb。
如果 cb 是一个函数,则会触发cb。
注意:如果 cb 不是函数或者是非 null/undefined 的值 (如23或false),会抛出 TypeError 异常。

4

你可以直接检查 cb

如果 cb 是一个函数,首先会得到一个 truthy 值作为第一次检查,然后调用该函数。

如果 cbnull,则第一部分为 falsy ,第二部分不会被执行。

cb => cb && cb()

这也是我想的XD,但我试图理解函数中缺少的括号。 - Phiter
@Phiter 看一下ES6的箭头函数特性。 - enno.void
2
请注意,这确实返回了与原函数不同的内容。 - Bergi
1
cb => cb && cb() && undefined 这段代码可以解决这个问题,但如果我看到了这个代码,我会离开。 - xdumaine
1
@mr.void 我知道箭头函数,我的意思是 if 缺少右括号,代码语法有误。 - Phiter
是的 - 这就是我在寻找的 - 谢谢! - Ole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接