有没有时间
var result = !value ? null : value[0];
不等同于
var result = value ? value[0] : null;
答案 0 :(得分:3)
它永远不会有所作为,因为将“value”解释为布尔值的过程在两种情况下都是相同的。完成该过程后,!
只会翻转感觉。
答案 1 :(得分:3)
将语言规范中的形式主义添加到Pointy的答案中。
当您通过the conditional (? :) operator运行代码时,首先发生的事情是在左侧调用ToBoolean
。
当您执行!value
ToBoolean
时会在左侧调用,然后调用ToBoolean。规范很清楚这个说法:
如果ToBoolean(GetValue(lref))为真,那么
设trueRef是评估第一个AssignmentExpression的结果。
否则
让falseRef成为评估第二个AssignmentExpression的结果。
因此,假设JavaScript引擎不包含错误,则不存在您在JavaScript中获得不同结果的情况。