Dav*_*vid 4 javascript equality
基于这些规则:
虚假:
真相:其他一切
我找不到正确的解释来解释为什么在下面的测试中,只有数字 1 评估为“true”
0 == true ("false")
1 == true ("true")
2 == true ("false")
othernumber == true ("false")
Run Code Online (Sandbox Code Playgroud)
“真”和“假”规则仅在值本身被用作测试时适用,例如:
var str = "";
if (str) {
// It's truthy
} else {
// It's falsy
}
Run Code Online (Sandbox Code Playgroud)
==有自己的一组不同的规则来确定其操作数的松散相等性,这些规则在规范的抽象相等性比较算法中进行了彻底的解释:
- 如果 Type(x) 与 Type(y) 相同,则
- 返回执行严格相等比较 x === y 的结果。
- 如果 x 为 null 并且 y 未定义,则返回 true。
- 如果 x 未定义且 y 为 null,则返回 true。
- 如果 Type(x) 为 Number,Type(y) 为 String,则返回比较结果 x == ToNumber(y)。
- 如果 Type(x) 是 String 并且 Type(y) 是 Number,则返回比较结果 ToNumber(x) == y。
- 如果 Type(x) 为 Boolean,则返回 ToNumber(x) == y 的比较结果。
- 如果 Type(y) 为 Boolean,则返回 x == ToNumber(y) 的比较结果。
- 如果 Type(x) 是 String、Number 或 Symbol 并且 Type(y) 是 Object,则返回比较结果 x == ToPrimitive(y)。
- 如果 Type(x) 是 Object 并且 Type(y) 是 String、Number 或 Symbol,则返回 ToPrimitive(x) == y 的比较结果。
- 返回假。
请参阅规范,了解其中列出的各种抽象操作的完整详细信息,尽管名称几乎说明了它们的作用。(如果你查看规范,你会在不同的地方看到!before ToNumber;我在上面删除了它。它不是逻辑NOT 运算符,它是与“突然完成”相关的规范符号。)
让我们按照您的示例进行操作2 == true:
1 == true但请注意,步骤 7 对于您的示例有所不同:
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |