Javascript if-statement vs. comparsion

Javascript if-statement vs. comparsion

本文关键字:comparsion vs if-statement Javascript      更新时间:2023-09-26

if-statement JavaScript 中将条件包装成布尔值是真的吗?

if(x) => if(Boolean(x))

在比较中,JavaScript 将比较元素包装成一个数字是真的吗?

a == b => Number(a) == Number(b)

是,也不是。

对于第一部分,是的,这基本上就是javascript所做的。

但对于后者,没有。并非 JavaScript 中的所有内容都可以转换为数字。例如:

Number('abc') // => NaN

非数字不相等:

NaN == NaN // => false

所以像这样:

Number('abc') == Number('abc') // => false!

但对于平等比较来说,这实际上是正确的。

'abc' == 'abc' // => true

作为旁注,最好在 JavaScript 中使用 ===,它还检查要比较的值的类型:

0 == '0' // => true
0 === '0' // => false, because integer is not a string

有关===的更多详细信息,请参阅此处。

  1. 是的,确实如此,在这种情况下,x是在布尔上下文中评估的,因此应用了相当于Boolean(x)

  2. 不,这不是真的。它之所以看起来如此,是因为强制相等运算符==尝试将ab转换为相同的类型。 仅当 ab 已经是Number时,才应用Number()。例如:


>>> 0x2A == 42
true   // both 'a' and 'b' are numbers.
>>> "0x2A" == 42
true   // 'a' is a string whose number coercion is equal to 'b'.
>>> "0x2A" == "42"
false  // 'a' and 'b' are different strings.

在 if 语句 JavaScript 中将条件包装到布尔值中是真的吗?

通常是的。

在比较中,JavaScript 将比较元素包装成一个数字是真的吗?

绝对没有。

解释

来自 JavaScript 语言规范。

§ 12.5if语句定义为:

if ( 表达式 ( 语句 else 语句

它说表达式将被评估,用GetValue()转换,然后在ToBoolean()转换后进行测试。

然后第一个断言为 true(但稍后见(,if语句的条件被计算,就像作为参数传递给 Boolean 函数一样。请回想一下 JavaScript 如何处理类型转换为布尔值 (§ 9.2(:

  • undefinednull值将转换为 false
  • 如果数字为
  • ±0 或 NaN则转换为 false,否则它们将转换为 true
  • 如果字符串为空,则转换为 false否则始终转换为true,无论其内容如何。
  • 对象始终转换为 true

由于呼吁GetValue()严格来说,这个断言并不总是正确的,看看§8.7.1,其中标准描述了GetValue()是如何工作的,在调用ToBoolean()之前可能会发生一些魔术转换。

==运算符的定义见 § 11.9.3
如您所见,它没有指定操作数必须是(或将被视为(数字,运算符的行为是不同的,并受基于操作数类型的一系列规则的约束。那么你的第二个断言是错误的。它们是数字(或其中一个是数字(的情况只是算法中的一个特例,请注意,在算法的第 4 点,它说如果其中一个是数字,另一个是字符串,那么它将用 ToNumber() 进行转换,只有在这种情况下(具有此转换的所有含义(。

如果您认为可以比较函数,字符串或数字,则很直观,但并非每种类型都可以转换为数值。