我看到一些代码似乎使用了一个我无法识别的运算符,以两个感叹号的形式出现,如下所示:!!.有人可以告诉我这个运营商的作用吗?
我看到这个的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
Run Code Online (Sandbox Code Playgroud) 我理解double not运算符在JavaScript中的作用.我很好奇它的使用,以及我最近做出的断言是否正确.
我说这if (!!someVar)从来没有意义,也不是(!!someVar && ...因为它if和&&将导致someVar被评估为布尔值所以!! 是多余的.
事实上,我唯一能想到使用double not运算符是合法的,如果你想对另一个布尔值进行严格的比较(那么可能在返回值中明确要求true或false).
它是否正确?我开始怀疑自己的时候,我注意到的jQuery 1.3.2同时使用if (!!someVar)和return !!someVar && ...
双重在这些情况下没有任何实际效果吗?
我个人认为,这只是导致混乱.如果我看到if语句,我知道它将它作为布尔值进行评估.
在sequlize docs的代码示例中:
if (!!err) {
console.log('Unable to connect to the database:', err)
} else {
console.log('Connection has been established successfully.')
}
Run Code Online (Sandbox Code Playgroud)
他们为什么要(!!err)用来测试那个错误的真实性?是不是一样的if (err)?
我经常看到使用的代码!!condition而不仅仅是常规条件.即:
if(!!value){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
与:
if(value){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
如果存在功能上的差异是什么?一个优于另一个?如果有的话,选择使用一个与另一个的条件是什么?