对于为什么不基于以下代码调用以下console.log,我感到很困惑。 x肯定不等于'',因为它设置为0
var x=0;
if (x!=''){
console.log('here', x);
}
答案 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中的“真实性”和“虚假性”:
要解决此问题,请使用严格的比较!==和===。
答案 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
松散相等将两个值转换为通用类型后,会比较两个值是否相等。转换后(双方可能会进行转换),最终的相等比较将完全按照
===
进行。
==
将两个操作数都转换为通用类型。这里0
是Number
,因此它将使用''
将Number
转换为Number('')
,而Number('')
返回0
,因此就是{{ 1}}。
如果您想避免这种情况,可以使用0 == ''
和===
!==