为什么x = 0等于x =''

时间:2019-03-11 19:11:03

标签: javascript

对于为什么不基于以下代码调用以下console.log,我感到很困惑。 x肯定不等于'',因为它设置为0

var x=0;

if (x!=''){
  console.log('here', x);
}

4 个答案:

答案 0 :(得分:0)

您需要使用!==代替!=

var x = 0;

if (x !== ''){
  console.log('here', x);
}

===相同,而不是==

这是因为三等号也会检查类型,否则值将被强制为“真值”或“假值”。

console.log(0 == '');   //>true
console.log(0 === '');  //>false
console.log(3 == '3');  //>true
console.log(3 === '3'); //>false

答案 1 :(得分:0)

这是一篇很好的文章,解释了JavaScript中的“真实性”和“虚假性”:

https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/blob/master/samples/language/luis/luis_authoring_samples.py#L29

要解决此问题,请使用严格的比较!==和===。

答案 2 :(得分:0)

这是因为0是一个伪造的值(https://developer.mozilla.org/en-US/docs/Glossary/Falsy

if (0) console.log("hi, I'm a falsy value)

如果要检查确切的类型和值,请尝试===运算符

if (x === 0) console.log("zero here)

答案 3 :(得分:0)

这是因为您正在使用Loose Equality

  

松散相等将两个值转换为通用类型后,会比较两个值是否相等。转换后(双方可能会进行转换),最终的相等比较将完全按照===进行。

==将两个操作数都转换为通用类型。这里0Number,因此它将使用''Number转换为Number(''),而Number('')返回0,因此就是{{ 1}}。
如果您想避免这种情况,可以使用0 == ''===

!==