if语句JavaScript是否将条件包装成布尔值?
if(x) => if(Boolean(x))
相比之下,JavaScript将比较元素包装成数字吗?
a == b => Number(a) == Number(b)
答案 0 :(得分:3)
是,否。
对于第一部分,是,这基本上就是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
有关===
的更多详情可以是read over here。
答案 1 :(得分:1)
是的,这是真的,x
在这种情况下在布尔上下文中进行评估,因此应用了Boolean(x)
的等价物。
不,那不是真的。它只是这样,因为coercitive equality operator ==
尝试将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.
答案 2 :(得分:1)
if语句JavaScript是否将条件包装成布尔值?
通常是。
相比之下,JavaScript将比较元素包装成数字吗?
绝对没有。
来自JavaScript Language Specifications。
if
语句在§12.5中定义为:
if(Expression)Statement else Statement
它表示将评估 Expression ,使用GetValue()
进行转换,然后在ToBoolean()
转换后进行测试。
然后第一个断言为真(但稍后再看),if
语句的条件被评估为像Boolean
函数作为参数传递。请回想一下JavaScript如何处理类型转换为布尔值(§9.2):
undefined
和null
值转换为false
。false
,则数字会转换为NaN
,否则会转换为true
。false
如果为空,否则始终转换为true
,无论其内容如何。true
。由于对GetValue()
的调用严格地说这个断言不是始终是真的,请查看§8.7.1,其中标准描述了{ {1}}有效,在GetValue()
被调用之前,可能会发生一些 magic 转换。
ToBoolean()
运算符定义为§11.9.3。
正如您所看到的,它没有指定操作数必须(或将被视为)数字,操作符的行为是不同的,并且由基于操作数类型的一系列规则来调节。然后你的第二个断言是假的。它们是数字(或其中一个是数字)的情况只是算法中的一个特例,请注意算法的第4点它表示如果其中一个是数字而另一个是字符串然后它将被转换为==
,仅在这种情况下(具有此转换所具有的所有含义)。
如果您认为可以比较函数,字符串或数字,那么这是直观的,并非每种类型都可以转换为数值。