这个表达是什么意思"!!"

Ale*_*lex 5 javascript

为什么有人会使用像这样的表达式

if(!!window.JSON) alert('exists');
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

if(window.JSON) alert('exists');
Run Code Online (Sandbox Code Playgroud)

是否有"!!"的另一种用法 东西?

CMS*_*CMS 15

!!将简单地导致布尔转换,根本不需要将此构造与if语句一起使用,在第一个片段中,将对象转换为布尔值没有意义,它将始终为true.

可以强制的唯一值falsenull,undefined,NaN,0,和空字符串,当然,false任何东西都不会强迫到true.

!!你想要确保得到一个布尔结果时,例如当使用逻辑&&||运算符时,使用是有意义的.

那些运算符可以返回操作数的值,而不是布尔结果,例如:

true && "foo"; // "foo"
"foo" || "bar" ; // "foo"
Run Code Online (Sandbox Code Playgroud)

想象一下,你有一个测试两个值的函数,你期望一个布尔结果:

function isFoo () {
  return 0 && true;
}

isFoo(); // returns 0, here it makes sense to use !!
Run Code Online (Sandbox Code Playgroud)

编辑:看你的编辑,if (!!window.JSON)就像我之前说的那样冗余,因为if语句本身将在评估条件表达式时在内部进行布尔转换.


Aku*_*ete 1

!是一个逻辑否定,!! 是应用两次的逻辑非,即逻辑恒等

我认为您正在阅读的代码只是无害的(尽管令人困惑)冗余。