JavaScript为什么要这样做? 为什么JavaScript认为值 0 /代码>等于空字符串? defValue=0; 如果(defValue='')defValue=null; 警报(defValue);//警报无效 defValue=1; 如果(defValue='')defValue=null; 警报(defValue);//警报1

JavaScript为什么要这样做? 为什么JavaScript认为值 0 /代码>等于空字符串? defValue=0; 如果(defValue='')defValue=null; 警报(defValue);//警报无效 defValue=1; 如果(defValue='')defValue=null; 警报(defValue);//警报1,javascript,Javascript,Fiddle:当使用=检查两个值的相等性时,JavaScript做了一些非常有趣的事情。如果值是不同的类型,例如数字和字符串,则必须进行初始转换以使这两种类型协调一致 ECMAScript语言规范提供了用于确定两个值之间相等性的算法,以及在这两个值属于不同类型时将转换哪个值 ,抽象等式比较算法,概述了表达式x==y所采取的步骤,这就是您在这里查询的内容。请特别注意算法的第4步: 因此,必须首先将空字符串转换为数字。根据应用于字符串类型的ToNumber,空字符串的数学值为0 我们的x==y表达

Fiddle:

当使用
=
检查两个值的相等性时,JavaScript做了一些非常有趣的事情。如果值是不同的类型,例如数字和字符串,则必须进行初始转换以使这两种类型协调一致

ECMAScript语言规范提供了用于确定两个值之间相等性的算法,以及在这两个值属于不同类型时将转换哪个值

,抽象等式比较算法,概述了表达式x==y所采取的步骤,这就是您在这里查询的内容。请特别注意算法的第4步:

因此,必须首先将空字符串转换为数字。根据应用于字符串类型的ToNumber,空字符串的数学值为0

我们的x==y表达式现在是0==0,这显然是
true


如果你想避免强制转换,你应该考虑检查严格的等式,而不是。如果这两个值的类型不同,则算法会立即返回

false

当使用
==
检查两个值的相等性时,JavaScript会做一些非常有趣的事情。如果值是不同的类型,例如数字和字符串,则必须进行初始转换以使这两种类型协调一致

ECMAScript语言规范提供了用于确定两个值之间相等性的算法,以及在这两个值属于不同类型时将转换哪个值

,抽象等式比较算法,概述了表达式x==y所采取的步骤,这就是您在这里查询的内容。请特别注意算法的第4步:

因此,必须首先将空字符串转换为数字。根据应用于字符串类型的ToNumber,空字符串的数学值为0

我们的x==y表达式现在是0==0,这显然是
true


如果你想避免强制转换,你应该考虑检查严格的等式,而不是。如果两个值的类型不同,则算法立即返回

false

Short:==进行任何必要的类型转换,然后求值,因此在这种情况下,转换后的空字符串与0的类型相同

0 == '' // return true.
所以你需要使用严格的比较来代替(==)

长:


Short:==进行任何必要的类型转换,然后求值,因此在这种情况下,转换后的空字符串与0的类型相同

0 == '' // return true.
所以你需要使用严格的比较来代替(==)

长:


因为它是Javascript。看这里:可能重复因为它是Javascript。看这里:可能重复作为一个附加说明,同样的事情也在PHP语言中完成。谁能告诉我,为什么强制转换是数字而不是字符串?在我看来,更多的事情可以通过字符串来表达,然后通过数字来表达,数字对我来说似乎有点有限。作为一个附加说明,同样的事情也是用PHP语言来完成的。有人能告诉我,为什么选择数字而不是字符串吗?在我看来,更多的东西可以通过字符串来表达,然后通过数字来表达,数字对我来说似乎有点有限。