gpt4 book ai didi

javascript - 为什么 if 语句中的赋值等于 true?

转载 作者:行者123 更新时间:2023-12-03 04:04:11 25 4
gpt4 key购买 nike

首先我要说的是我理解 ======。第一个用于将右侧值分配给左侧变量,第二个用于比较两个值的等价性,第三个不仅用于等价性,还用于类型比较(即 true === 1 将返回 false)。

所以我知道几乎任何时候你看到if (... = ...),作者很有可能想使用 ==.

也就是说,我并不完全理解这些脚本发生了什么:

var a = 5;

if (a = 6)
console.log("doop");

if (true == 2)
console.log('doop');

根据这个Javascript type equivalency table , true 等价于 1,但不等价于 0-1。因此,对我来说第二个脚本输出任何内容是有道理的(至少,它不在我的 Chrome v58.0.3029.110 中)。

那么为什么第一个脚本输出到控制台,而第二个脚本却没有?第一个脚本的 if 语句正在评估什么?

我深入研究了我的 C# 知识来帮助我理解,但在 C# 中你无法编译 if (a = 5) Console.WriteLine("doop"); 所以我必须将其显式转换为a bool 通过执行 if (Convert.ToBoolean(a = 5)) 但这样就有意义了,它会计算为 true,因为根据 MSDN 的文档,Convert.ToBool 返回 true如果提供的值不是 0。所以这对我没有多大帮助,因为在 JS 中只有 1true 是相等的。

最佳答案

使用 == 进行抽象相等比较与从数字值执行简单类型转换为 bool 值之间存在差异。在 bool 值和数字之间的 == 比较中, bool 值在比较之前转换为 0 或 1。因此在

if (true == 2)

true首先转换为1,然后与2进行比较。

在类型转换的情况下,例如

if (x = 2)

数字被转换为 bool 值,使得任何非零值都为真。即,将值 2 分配给 x,整个表达式的值为 2。然后,作为 if 语句评估的一部分,将其测试为 bool 值,并因此转换为 true,因为 2 不是 0.

计算结果为 bool 值 false 的各种值包括 0NaN"" null未定义,当然还有false。当作为 bool 值进行测试时(例如在 if 表达式中),任何其他值都是 true

关于javascript - 为什么 if 语句中的赋值等于 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44630882/

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