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

Javascript 0=='0'。解释这个例子,javascript,Javascript,我在另一个帖子中找到了这些例子,但我不明白 0 == '0' // true 左边的0是唯一一个这样做的数字。右边是一个非空字符串,它将转换为true。 那你怎么能 false==true->true 我错过了什么 编辑:很多抱怨。我不明白我的具体情况。顶部的链接正是我复制和粘贴这个案例的地方,当你使用==JavaScript时,我会尽力将你要比较的两个东西转换成相同的类型。在本例中,将0转换为“0”进行比较,结果为true 您可以使用===,它不会执行任何类型强制,这是

我在另一个帖子中找到了这些例子,但我不明白

0 == '0'            // true
左边的0是唯一一个这样做的数字。右边是一个非空字符串,它将转换为true。 那你怎么能 false==true->true

我错过了什么

编辑:很多抱怨。我不明白我的具体情况。顶部的链接正是我复制和粘贴这个案例的地方,当你使用==JavaScript时,我会尽力将你要比较的两个东西转换成相同的类型。在本例中,将0转换为“0”进行比较,结果为true

您可以使用===,它不会执行任何类型强制,这是最佳实践,以获得所需的结果

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

资料来源:


JavaScirpt表格等式:

以下是对您的问题的正式答案-引用的部分、底部的链接和分析:

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

x==y

例子

3==3//true

3==3//true

3=='3'//为真

这意味着,正如我所读到的,前3个整数被转换为字符串以满足比较,因此它变为'3'='3',这是真的,与零的情况相同

注意:我假设converion在不同的JS引擎中可能有所不同,尽管它们必须在ECMAScript规范下统一-quoted@Derek朕會功夫. 这一假设是基于一种主观和强制性的观点,即并非所有浏览器和JavaScript引擎都与ECMAScript兼容

身份/严格平等=== 如果操作数严格相等,则identity运算符返回true,请参见上文,不进行类型转换

答案末尾在同一资源上找到的Identity/strict equality===将跳过如上所述的自动类型转换,并将执行类型检查,以确保完全匹配,即,上面的表达式将在以下情况下失败:

TypeOfIt==typeofstring

这是大多数弱类型语言中的常见运算符:

我想说的是,我们应该确定一个函数/方法将返回什么,如果这个函数/方法将要返回数字、整数/浮点数,那么它应该坚持到底,否则相反的做法可能会因为许多原因而让你头疼,我们也会在这个问题上下课

上述内容也适用于其他类型较弱的语言,例如PHP

更多信息,请参阅第二个头部相等运算符:


在有人将其关闭之前:@Kay–请仔细阅读问题,iw是关于如何使用JS解析器的,而不是==和===之间的区别是什么,为什么你对男士问题投了反对票,因为它指向了另一个重复的问题,并且有2000票支持?相反,0不会被转换为false,字符串0被强制转换为数字0。@KrzysztofSafjanowski这不是一个解析问题-解析器将看到的只是操作数;==操作人员操作数。这取决于解释器决定如何在必要时强制转换操作数。这就是我感到困惑的地方。0不会被强制转换为false,相反,字符串0被强制转换为数字0。@user874774-阅读规范:第四点。Rolice,键入强制转换不会改变,因为它在ECMAScript规范中有明确定义。虽然有些浏览器可能不遵循它…我说的是你IE@德里克朕會功夫, 是的,我也怀疑,但我不得不提一提。有很多浏览器,有些是官方的,有些不是,不能确定每一个。我也引用了你的论点。