Javascript中有没有时间“!value?null:value [0]”可能不等于“value?value [0]:null”?

时间:2015-01-05 20:40:48

标签: javascript

有没有时间

var result = !value ? null : value[0];

不等同于

var result = value ? value[0] : null;

2 个答案:

答案 0 :(得分:3)

它永远不会有所作为,因为将“value”解释为布尔值的过程在两种情况下都是相同的。完成该过程后,!只会翻转感觉。

答案 1 :(得分:3)

将语言规范中的形式主义添加到Pointy的答案中。

当您通过the conditional (? :) operator运行代码时,首先发生的事情是在左侧调用ToBoolean

当您执行!value ToBoolean时会在左侧调用,然后调用ToBoolean。规范很清楚这个说法:

  

如果ToBoolean(GetValue(lref))为真,那么

     

设trueRef是评估第一个AssignmentExpression的结果。

     

否则

     

让falseRef成为评估第二个AssignmentExpression的结果。

因此,假设JavaScript引擎不包含错误,则不存在您在JavaScript中获得不同结果的情况。