在JavaScript中,为什么“0”等于false,但是当通过“if”测试时,它本身并不是false?

2022-08-30 00:23:46

下面显示了 Javascript 中的错误:"0"

>>> "0" == false
true

>>> false == "0"
true

那么为什么下面打印呢?"ha"

>>> if ("0") console.log("ha")
ha

答案 1

显示问题的表:

truthy if statement

和 ==truthy comparisons of all object types in javascript

故事使用寓意 ===strict equality displaying sanity

表生成信用: https://github.com/dorey/JavaScript-Equality-Table


答案 2

原因是因为当您显式执行此操作时,两边都转换为数字,然后执行比较。"0" == false

当您执行:时,正在测试字符串值。任何非空字符串都是 ,而空字符串是 。if ("0") console.log("ha")truefalse

等于 (==)

如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格的比较。如果任一操作数是数字或布尔值,则操作数将尽可能转换为数字;否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能)。如果两个操作数都是对象,则 JavaScript 会比较当操作数引用内存中的同一对象时,内部引用是相等的。

(来自 Mozilla Developer Network 中的 Comparison Operators