JavaScript中的双重否定(!!)
可能重复:
是什么 !! (不)没有运算符在JavaScript中?
我遇到过这段代码
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)
它转换为布尔值。 第一!
否定它一次,转换值如下:
undefined
为true
null
为true
+0
为true
-0
为true
''
为true
NaN
为true
false
为true
false
然后另一个!
再次否定它。 简洁转换为布尔值,完全等同于ToBoolean,因为!
被定义为否定。 然而,这里没有必要,因为它仅用作条件运算符的条件,它将以同样的方式确定真实性。
var x = "somevalue"
var isNotEmpty = !!x.length;
让我们分解它:
x.length // 9
!x.length // false
!!x.length // true
所以它被用来将“truethy”“falsy”值转换为一个布尔值。
以下值在条件语句中相当于false:
""
( ''
) 其他所有值都等同于true。
双重否定将“truthy”或“falsy”值转换为布尔值, true
或false
。
大多数人都熟悉使用真实性作为测试:
if (options.guess) {
// runs if options.guess is truthy,
}
但这并不一定意味着:
options.guess===true // could be, could be not
如果你需要强制一个“truthy”值为真正的布尔值, !!
是一个方便的方法来做到这一点:
!!options.guess===true // always true if options.guess is truthy
链接地址: http://www.djcxy.com/p/12641.html