gpt4 book ai didi

javascript - JS类型强制是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:21 26 4
gpt4 key购买 nike

我正在学习 ===== 的对比,并遇到了这个 answer这对理解这个概念很有帮助。但是我想知道其中一个例子:

'0' == false     // true

这可能是有道理的,因为 == 不检查类型。但是后来我在控制台中尝试了一些可能的强制转换并发现了以下内容:

Boolean('0')     // true
String(false) // "false"

我本以为 '0' == false'0' === String(false) 具有相同的真值,但事实并非如此确实如此。

那么强制转换实际上是如何起作用的呢?我是否缺少更基本的类型?

最佳答案

"0" 是包含字符0 的字符串,它不是 数值0。计算结果为 false 的唯一字符串类型值是 ""

“0”truthy .

Section 9.2 of the ECMAScript 262 specification定义不同类型如何转换为 bool 值:

Argument Type   Result
Undefined false
Null false
Boolean The result equals the input argument (no conversion).
Number The result is false if the argument is +0, −0, or NaN; otherwise the
result is true.
String The result is false if the argument is the empty String (its length is
zero); otherwise the result is true.
Object true

但是,只有在使用 === 进行比较时才严格遵守这一点。

当使用 Boolean('0') 时,您将值 '0' 转换为 bool 值(与使用 !!'0 相同) ').当松散地比较 '0'false 时, bool 值被转换为数字(定义为 here )。 false,当转换为数字时,变为 0。这意味着最终计算结果为 '0' == 0,等于 true

总结上述 ECMAScript 规范链接部分的相关部分:

  1. x = '0'y = false
  2. 检查 y 的类型是否为 Boolean。
  3. 如果为真,将y 转换为数字。
  4. xy 的等价数字进行比较。

在我们的例子中,它的 JavaScript 实现是:

var x = '0',                      // x = "0"
y = false; // y = false

if (typeof y === "boolean") {
y = +y; // y = 0
}

console.log( x == y ); // "0" == 0
-> true

关于javascript - JS类型强制是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com