如下所示,Javascript中的"0"为false:
>>> "0" == false
true
>>> false == "0"
true
那么下面为什么打印“哈”呢?
>>> if ("0") console.log("ha")
ha
如下所示,Javascript中的"0"为false:
>>> "0" == false
true
>>> false == "0"
true
那么下面为什么打印“哈”呢?
>>> if ("0") console.log("ha")
ha
当前回答
在JS中,“==”符号不检查变量的类型。因此,“0”= 0 = false(在JS中为0 = false),在这种情况下将返回true,但如果使用“===”,结果将为false。
当你使用"if"时,在以下情况下它将是"false":
[0, false, '', null, undefined, NaN] // null = undefined, 0 = false
So
if("0") = if( ("0" !== 0) && ("0" !== false) && ("0" !== "") && ("0" !== null) && ("0" !== undefined) && ("0" !== NaN) )
= if(true && true && true && true && true && true)
= if(true)
其他回答
==相等运算符在将参数转换为数字后求值。 因此字符串0" 0"被转换为数字数据类型,布尔值false被转换为数字0。 所以
"0" == false // true
同样适用于'
False == "0" //true
===严格的相等性检查使用原始数据类型计算参数
"0" === false // false,因为"0"是字符串,false是布尔值
同样适用于
False === "0" // False
In
if(“0”) console.log(“ha”);
String "0"不与任何参数进行比较,并且String在与任何参数进行比较之前都是真值。 就像
if (true) console.log (" ha ");
But
If (0) console.log("ha");//空控制台行,因为0是假的
`
0周围的引号使它成为一个字符串,它的值为true。
删除引号,它应该工作。
if (0) console.log("ha")
显示问题的表格:
和= =
这个故事的寓意使用===
表生成credit: https://github.com/dorey/JavaScript-Equality-Table
这是因为JavaScript在布尔上下文和代码中使用类型强制
if ("0")
将在布尔上下文中被强制为true。
在Javascript中还有其他的真值,在布尔上下文中会被强制为真,因此执行if块:-
if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
这就是为什么你应该尽可能使用严格相等===或严格相等!== =的原因
"100" == 100
为True,因为这只检查值,而不是数据类型
"100" === 100
检查值和数据类型