我在另一个帖子中找到了thoose示例,但我没有得到它。
0 == '0' // true
左边的0我转换为false(唯一的数字)。右边是一个非空字符串,它转换为true。 怎么可以 false == true - >真
我错过了什么?
编辑:很多抱怨。我不了解我的具体情况。 (并且顶部的链接正是我复制并粘贴此案例的地方)答案 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/