Javascript 0 ==' 0'。解释这个例子

时间:2014-08-07 19:19:48

标签: javascript

我在另一个帖子中找到了thoose示例,但我没有得到它。

0 == '0'            // true
左边的

0我转换为false(唯一的数字)。右边是一个非空字符串,它转换为true。 怎么可以 false == true - >真

我错过了什么?

编辑:很多抱怨。我不了解我的具体情况。 (并且顶部的链接正是我复制并粘贴此案例的地方)

2 个答案:

答案 0 :(得分:6)

以下是您的问题的正式答案(引用部分,底部链接)和分析:

平等(==)

  

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

     

x == y

     

实施例

     

3 == 3 // true

     

“3”== 3 // true

     

3 =='3'// true

这意味着,正如我读到的那样,第一个3(整数)被转换为字符串以满足比较,因此它变为'3' == '3',这是真的,与你的情况相同。

注意:我认为转换在不同的JS引擎中可能会有所不同,尽管它们必须在ECMAScript特定的情况下统一 - http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3引用@Derek朕会功夫< /强>)。这个假设是基于主观和命令性的观点,并非所有浏览器和JavaScript引擎都符合ECMAScript。

身份/严格平等(===)

  

如果操作数严格相等(见上文)且没有类型转换,则identity运算符返回true。

在答案结尾处的同一资源上找到的身份/严格相等(===)将跳过自动类型转换(如上所述),并且还将执行类型检查,确保我们有完全匹配,即上面的表达式会失败,例如:

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

答案 1 :(得分:1)

使用== JavaScript会非常努力地将您要比较的两件事转换为相同的类型。在这种情况下,0会转换为'0'进行比较,然后生成true

您可以使用===来获取所需的结果,而{{1}}不会执行任何类型强制,也是最佳做法。

平等运营商

  

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

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

JavaScirpt表平等:http://dorey.github.io/JavaScript-Equality-Table/