Javascript 0 ==“0”,请解释此示例

kb5ga3dv  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(182)

我发现这些例子在另一个线程,但我不明白。

0 == '0'            // true

左边的0被转换为false(唯一一个这样做的数字)。右边的是一个非空字符串,它被转换为true。那么false == true --〉true
我错过了什么?

ymzxtsji

ymzxtsji1#

以下是对您的问题的官方答复(引用部分,链接在底部)和分析:

相等(==)

相等运算符转换类型不同的操作数,然后应用严格比较。如果其中一个操作数是数字或布尔值,则尽可能将操作数转换为数字; else如果其中一个操作数是字符串,则字符串操作数将尽可能转换为数字。如果两个操作数都是对象,则JavaScript将比较内部引用,当操作数引用内存中的同一对象时,内部引用是否相等。语法
x == y
示例
3 == 3//真
"3"== 3//真
3 =='3 '//真
这意味着,正如我所读到的,前3(整数)被转换为字符串以满足比较,因此它成为'3' == '3',这是真的,与零的情况相同。

NOTE: I assume that the converion may vary in different JS engines, although they have to be unified under ECMAScript specifiction - http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 (quoted @Derek朕會功夫). This assumption is made on a subjective and imperative opinion that not all browsers and JavaScript engines out there are ECMAScript compliant.

标识/严格相等(===)

如果操作数严格相等(见上文)且没有类型转换,则恒等运算符返回true。
在答案的结尾找到的**Identity/strict equality(===)**将跳过自动类型转换(如上所述),并将执行类型检查,以确保我们有精确匹配,即上面的表达式将在如下情况下失败:
typeof(int) == typeof(string)
这是大多数弱类型语言中的常用运算符:
http://en.wikipedia.org/wiki/Strong_and_weak_typing
我想说的是,一个人应该确定一个函数/方法将返回什么,如果这样的函数/方法将要返回数字(整数/浮点数),它应该坚持到最后,否则相反的做法可能会削减你的头有很多原因,一个躺在这个问题。
以上对于其他弱类型语言也是有效的,例如PHP。
阅读更多内容,请参考第二个标题(等式运算符):
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

roqulrg3

roqulrg32#

当你使用==的时候,JavaScript会非常努力地把你要比较的两个东西转换成相同的类型,在这种情况下,0会被转换成'0'来进行比较,然后得到true
您可以使用===来获得所需的结果,它不会进行任何类型强制,是最佳实践。

相等运算符

相等运算符转换类型不同的操作数,然后应用严格比较。如果其中一个操作数是数字或布尔值,则尽可能将操作数转换为数字; else如果其中一个操作数是字符串,则字符串操作数将尽可能转换为数字。如果两个操作数都是对象,则JavaScript将比较内部引用,当操作数引用内存中的同一对象时,内部引用是否相等。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
JavaScirpt表等式:http://dorey.github.io/JavaScript-Equality-Table/

相关问题