在if语句中,JavaScript会将条件包装成布尔值,这是真的吗?
if(x) => if(Boolean(x))
相比之下,JavaScript会将比较元素包装成数字吗?
a == b => Number(a) == Number(b)
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
===
,这样可以检查被比较的值的类型。0 == '0' // => true
0 === '0' // => false, because integer is not a string
关于===
的更多细节可以在这里阅读。
是的,这是真的,在这种情况下,x
在布尔上下文中被评估,因此应用了Boolean(x)
的等效形式。
不,这不是真的。它只是看起来像这样,因为强制相等运算符==
尝试将a
和b
转换为相同的类型。Number()
仅在a
或b
已经是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.
true == 1
和 false == 0
)。 - Frédéric Hamidiundefined
和null
值被转换为false
。NaN
,则数字将被转换为false
,否则将被转换为true
。false
,否则无论其内容如何,始终转换为true
。true
。由于调用了GetValue()
,严格来说这个断言并不总是成立,请参阅§ 8.7.1,其中标准描述了GetValue()
的工作方式,在ToBoolean()
被调用之前可能会发生一些魔法转换。
==
运算符的定义在§ 11.9.3中。正如您所看到的,它并没有指定操作数必须是数字(或将被视为数字),运算符的行为是不同的,并且受一系列基于操作数类型的规则所调节。因此,您的第二个断言是错误的。当它们是数字(或其中一个是数字)时,只是算法中的一个特殊情况,请注意,在算法的第4点中,它说如果其中一个是数字,而另一个是字符串,则会使用ToNumber()
进行转换,仅在这种情况下(具有此转换的所有含义)。