Era*_*dan 116 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;
}
Run Code Online (Sandbox Code Playgroud)
并不禁想知道为什么双重否定?是否有另一种方法可以达到同样的效果?
(代码来自https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js)
Ry-*_*Ry- 173
它转换为布尔值.第一个!否定它,转换值如下:
undefined 至 truenull 至 true+0 至 true-0 至 true'' 至 trueNaN 至 truefalse 至 truefalse然后另一个人!再次否定它.一个简洁的强制转换为布尔值,完全等同于ToBoolean,因为它!被定义为它的否定.但是,这里没有必要,因为它仅用作条件运算符的条件,它将以相同的方式确定真实性.
gdo*_*ica 48
var x = "somevalue"
var isNotEmpty = !!x.length;
Run Code Online (Sandbox Code Playgroud)
让我们分解成碎片:
x.length // 9
!x.length // false
!!x.length // true
Run Code Online (Sandbox Code Playgroud)
所以它用于将"truethy"\"falsy"值转换为布尔值.
条件语句中的以下值等于false :
""(\ '')所有其他值都等于true.
Jam*_*rgy 19
双重否定将"truthy"或"falsy"值转换为布尔值,true或false.
大多数人都熟悉使用真实性作为测试:
if (options.guess) {
// runs if options.guess is truthy,
}
Run Code Online (Sandbox Code Playgroud)
但这并不一定意味着:
options.guess===true // could be, could be not
Run Code Online (Sandbox Code Playgroud)
如果您需要将"truthy"值强制为true布尔值,那么这!!是一种方便的方法:
!!options.guess===true // always true if options.guess is truthy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45699 次 |
| 最近记录: |