gpt4 book ai didi

javascript - 理解 JavaScript 中的类型强制

转载 作者:数据小太阳 更新时间:2023-10-29 05:59:47 24 4
gpt4 key购买 nike

我知道 == 运算符执行类型强制。但我无法理解以下行为。

const x = new Boolean(false);

if (x) {
console.log("if(x) is true");
}

if (x == false) {
console.log("if(x == false) is true");
}

令人惊讶的是,上面的代码片段打印了两行:

如果(x)为真
如果(x == false)为真

有人可以解释这种奇怪的行为,还是我缺少一些基本的东西?

最佳答案

正如其他答案所提到的,那是因为 x 是一个对象——一个 bool 对象,但仍然是一个对象,因为您使用的是 new 运算符——并且是仅当您将 xfalse 进行比较时才会被强制:if (x) 正在检查 x 是否为 truthy 值,因此不需要强制转换(不涉及其他操作数):一个对象总是“真”(weeeell……几乎总是:typeof null 返回 object 但它是一个虚假的值(value)。但那是另一个故事......)。

您可以轻松检查何时调用强制转换,点击 toPrimitive 符号:

var x = new Boolean(false);

// first of all, if it wasn't an object you couldn't
// do this
x[Symbol.toPrimitive] = function(hint) {
console.log({hint});
return this.valueOf();
}

// no console.log yet
if (x) {
console.log("if(x) is true");
}

// here you got the console.log before the one
// inside the block, since the coercion happens
// in the `if`
if (x == false) {
console.log("if(x == false) is true");
}

关于javascript - 理解 JavaScript 中的类型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718448/

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