Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript If/Else条件&;比较-差异_Javascript_Casting_Comparison_Boolean_Conditional Statements - Fatal编程技术网

JavaScript If/Else条件&;比较-差异

JavaScript If/Else条件&;比较-差异,javascript,casting,comparison,boolean,conditional-statements,Javascript,Casting,Comparison,Boolean,Conditional Statements,好的,这是我的小问题: 我知道==和==操作符将比较类型,然后比较值,然后比较==和=将强制转换类型,然后只比较值 如果(myVar)和如果(!myVar)呢 如果(myVar==true)和如果(myVar==false),行为是否有任何区别?是的,有区别。例如: if('true' == true) { alert("This doesn't happen"); } if('true') { alert("But this does happen."); } 原因是什么?

好的,这是我的小问题:

我知道
==
==
操作符将比较类型,然后比较值,然后比较
==
=将强制转换类型,然后只比较值

如果(myVar)
如果(!myVar)


如果(myVar==true)和
如果(myVar==false)
,行为是否有任何区别?

是的,有区别。例如:

if('true' == true) {
    alert("This doesn't happen");
}

if('true') {
    alert("But this does happen.");
}
原因是什么?它们都转换为
number
s进行比较<代码>'true'转换为
NaN
true
转换为
1


避免这种愚蠢行为,永远不要写
==true
==false

是的,这是有区别的。如前所述,如果将值与
==
进行比较,则会进行类型转换

如果值的类型不同,则它们都将转换为字符串或数字。如果其中一个值是布尔值,而另一个不是布尔值,则两个值都将转换为数字

中定义了比较算法。重要的一步是:

七,。如果类型(y)是布尔值,则返回比较结果
x==ToNumber(y)

因此,首先将
true
转换为一个数字,然后将
myVar
转换为一个数字


如果您只有
If(myVar)
,那么:

二,。如果
ToBoolean(GetValue(exprRef))
为true,则


并且可以返回非常不同的结果



注意:如果
myVar
实际上是一个布尔值,那么
If(myVar==true)
If(myVar)
是的,
If(myVar)和If(!myVar)
如果(myVar==true)和If(myVar==false)

if(myVar)和if(!myVar)
中!myVar将为每个“false”值返回true(空字符串、0、null、false、未定义、NaN)

if(myVar==true)
if(myVar==false)
检查myVar值是真还是假。即使myVar值为NULL、NaN或未定义的0,它也会像

if(NULL==true)

总结:

NOT operator'!' converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
And if you compare values with '==', JavaScript does type conversion which can lead to unexpected behavior (like undefined == null).

是的,他们不一样。这件事已经讨论过好几次了,是的。请看这两个相关的问题:谢谢,这是对我最好的解释。它是否包含任何内容的确切含义是什么?@FelixKling它显然意味着如果它是
null、false、NaN、undefined、“、+0或-0
:P@FelixKling:“false”值,即空字符串、0、null、false、未定义、NaNYeah,我猜是这样;)但是用词不太准确。对不起,吹毛求疵。