我遇到了这段代码
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; }
忍不住想知道为什么双重否定?有没有其他方法可以达到相同的效果?
它转换为布尔值。第一个取反!一次,转换值如下:
!
undefined
true
null
+0
-0
''
NaN
false
然后其他人!再次否定它。简明投地布尔,完全等同于ToBoolean仅仅是因为!被定义为它的否定。但是,这里没有必要,因为它仅用作条件运算符的条件,条件运算符将以相同的方式确定真实性。