可能重复:
我遇到过这段代码:
function printStackTrace(options) {
options = options || {guess: true};
var ex = options.e || null, guess = !!options.guess;
var p = new printStackTrace.implementation(), result = p.run(ex);
return (guess) ? p.guessAnonymousFunctions(result) : result;
}
我不禁想知道为什么双重否定?还有其他方法可以达到同样的效果吗?
(代码来自 https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js。 )
原文由 Eran Medan 发布,翻译遵循 CC BY-SA 4.0 许可协议
它转换为布尔值。第一个
!
否定它一次,像这样转换值:undefined
到true
null
至true
+0
到true
-0
至true
''
至true
NaN
到true
false
到true
false
然后另一个
!
再次否定它。对布尔值的简洁转换,完全等同于 ToBoolean 只是因为!
被 定义为它的否定。不过,这里没有必要,因为它仅用作条件运算符的条件,它将以相同的方式确定真实性。