可能重复:
What is the !! (not not) operator in 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)
发布于 2012-05-06 09:52:57
它会强制转换为布尔值。第一个!
对它求反一次,像这样转换值:
undefined
到true
null
到true
+0
到true
-0
到true
''
到true
NaN
到true
false
到true
false
然后另一个!
再次否定它。一种简洁的布尔值转换,完全等同于ToBoolean,因为!
是defined as its negation。不过,这里没有必要这样做,因为它只用作条件运算符的条件,条件运算符将以同样的方式确定真实性。
发布于 2012-05-06 09:51:42
var x = "somevalue"
var isNotEmpty = !!x.length;
让我们把它分成几部分:
x.length // 9
!x.length // false
!!x.length // true
因此,它用于将"truethy“\"falsy”值转换为布尔值。
下列值等效于条件语句中的false
空字符串编号(\ ''
)
""
0
所有其他值都等于true。
发布于 2012-05-06 09:54:51
双重否定将“真”或“假”值转换为布尔值,true
或false
。
大多数人都熟悉使用真实性作为测试:
if (options.guess) {
// runs if options.guess is truthy,
}
但这并不一定意味着:
options.guess===true // could be, could be not
如果您需要强制将“真实”值转换为真正的布尔值,!!
是一种方便的方法:
!!options.guess===true // always true if options.guess is truthy
https://stackoverflow.com/questions/10467475
复制相似问题