Javascript:最有效的方法是为函数调用定义变量,或者对变量是否为null?

Ash*_*man 0 javascript

使用三元运算符需要两次调用该函数.

var colour = (tryAdventurousColour() != null) ? tryAdventurousColour() : 'black';
Run Code Online (Sandbox Code Playgroud)

可以在1行中完成吗?

编辑:修正语法编辑:像这样但更好

var color =((color = tryAdventurousColour())!= null)?颜色:'黑色';

nnn*_*nnn 5

使用JavaScript的逻辑或运算符:

var colour = tryAdventurousColour() || 'black';
Run Code Online (Sandbox Code Playgroud)

您的功能tryAdventurousColour()将执行一次.如果它返回"truthy"值,那么该colour变量将被赋值给该值,否则colour将为"黑色".这完全适合您的场景,因为它null是一个"虚假"的价值.

更一般地说,如果表达式可以转换为true("truthy"),则表达式a || b返回a,否则返回b.请注意,非零数字,非空字符串和对象都将转换为true.null,undefined,0,""将全部转换为false.(如果我遗漏了某些东西,我肯定会有人纠正我.)

  • 不,不要做`var color =(tryAdventurousColour()!= failValue)|| 'black'`因为那将返回'true`或'black'.!=表达式的计算结果为true或false,而不是颜色.@katspaugh - 好点,但不管怎么说0会是黑色的呢?另一种选择是将默认处理移动到函数中...... (2认同)
  • 不,这有同样的问题,因为最里面的括号中的表达式返回一个布尔值.颜色仍然最终为真或"黑". (2认同)