在coffee脚本中,对这样的函数使用存在操作符:

myFunc?()

编译为
typeof myFunc === "function" ? myFunc() : void 0;

有没有一种方法可以优雅地定义将代替“void 0”的内容?还是我必须全部写出来而不是使用原始符号?

最佳答案

您可以添加另一个存在运算符:

x = f?() ? 'pancakes'

如果f()返回nullundefined,那将不起作用,但是如果f()返回false,它将做正确的事。例如:
f = 'not a function'
console.log f?() ? 'pancakes'
# pancakes

f = -> 'is a function'
console.log f?() ? 'pancakes'
# is a function

f = -> null
console.log f?() ? 'pancakes'
# pancakes

f = ->
console.log f?() ? 'pancakes'
# pancakes

f = -> false
console.log f?() ? 'pancakes'
# false

演示:http://jsfiddle.net/ambiguous/f6yvN/1/

因此,您可以接近所需的对象,并且该对象可能足够接近,这取决于您期望函数返回的是哪种东西。

关于javascript - coffeescript存在函数运算符else语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10168623/

10-11 11:08