Double negation (!!) in javascript - what is the purpose?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is the !! (not not) operator in JavaScript?
我遇到过这段代码
1 2 3 4 5 6 | 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 的表达
然后另一个
1 2 | var x ="somevalue" var isNotEmpty = !!x.length; |
让我们把它拆开:
1 2 3 | x.length // 9 !x.length // false !!x.length // true |
所以它将"truethy""falsy"值转换为布尔值。
以下值在条件语句中等价于false:
- 假
- 无效的
- 未定义
- 空字符串
"" ('' ) - 数字0
- 数字南
所有其他值都等于真。
双重否定将"真"或"假"值转换为布尔值,即
大多数人都熟悉使用Truthiness作为测试:
1 2 3 | if (options.guess) { // runs if options.guess is truthy, } |
但这并不一定意味着:
1 | options.guess===true // could be, could be not |
如果您需要将"truthy"值强制为真正的布尔值,那么
1 | !!options.guess===true // always true if options.guess is truthy |