微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 JavaScript 中的“0”==“”为假

如何解决为什么 JavaScript 中的“0”==“”为假

在 ES5 规范中,条款 11.9.3.4-5 说:

如果 Type(x) 是 Number 并且 Type(y) 是 String,则返回结果 比较 x == ToNumber(y)。
如果 Type(x) 是 String 并且 Type(y) 是 Number,返回比较结果ToNumber(x) == y。

我的理解是:
"" 被强制为数字并变为 0 -> "0"==0
然后递归地将“0”强制为数字并变为 0 -> 0==0
所以输出必须是true
但它是
你能解释一下原因吗?

console.log("0"=="")

解决方法

"0" 是一个字符串。 "" 也是如此。不涉及类型强制。

0(单个字符,字符代码48)组成的字符串不等同于空字符串。

如果 '0'0,则过程将按照您的描述进行:

console.log(0 == "")

空字符串变成数字 - 0 - 然后 0 === 0 计算为 true。-

(但我建议无论如何都不要使用草率的平等 - 始终使用严格平等,您不必担心任何这种愚蠢)

,

7.12.4 Abstract Equality Comparison 中的第一个子句是:

  1. 如果Type(x)与Type(y)相同,则
    一种。返回执行严格相等比较 x === y 的结果。

7.12.5 Strict Equality Comparison 全文阅读:

  1. 如果 Type(x) 与 Type(y) 不同,则返回 false。
  2. 如果 Type(x) 是 Number 或 BigInt,则
    一种。返回 !类型(x)::equal(x,y).
  3. 回来! SameValueNonNumeric(x,y)。

由于"0"""的类型都是String,case#1和case#2都不适用,所以我们转到7.2.12 SameValueNonNumeric(x,y)

  1. 断言:Type(x) 不是 Number 或 BigInt。
  2. 断言:Type(x) 与 Type(y) 相同。
  3. 如果 Type(x) 为 Undefined,则返回 true。
  4. 如果 Type(x) 为 Null,则返回 true。
  5. 如果 Type(x) 是 String,则。
    一种。如果 x 和 y 是完全相同的代码单元序列(相同的长度和相应索引处的相同代码单元),则返回 true;否则,返回 false。
  6. 如果 Type(x) 是布尔值,则 一种。如果 x 和 y 都为真或都为假,则返回真;否则,返回 false。
  7. 如果 Type(x) 是 Symbol,则 一种。如果 x 和 y 都是相同的 Symbol 值,则返回 true;否则,返回 false。
  8. 如果 x 和 y 是相同的 Object 值,则返回 true。否则,返回 false。

应该很容易看出第 5 种情况适用于此处:

  1. 如果 Type(x) 是 String,则。
    一种。如果 x 和 y 是完全相同的代码单元序列(相同的长度和相应索引处的相同代码单元),则返回 true;否则,返回 false。

还应该很容易看出 "0""" 不是完全相同的代码单元序列,因为它们在相应的索引处既没有相同的长度,也没有相同的代码单元。>

因此,结果为 false,根据 7.2.12 第 5 条第 a 款的第二种选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?