Javascript if语句与比较

时间:2012-05-08 07:39:39

标签: javascript

if语句JavaScript是否将条件包装成布尔值?

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

相比之下,JavaScript将比较元素包装成数字吗?

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

3 个答案:

答案 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)

  1. 是的,这是真的,x在这种情况下在布尔上下文中进行评估,因此应用了Boolean(x)的等价物。

  2. 不,那不是真的。它只是这样,因为coercitive equality operator ==尝试将ab转换为相同的类型。仅当Number()a已经是b时才会应用Number。例如:


  3. >>> 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):

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

由于对GetValue()的调用严格地说这个断言不是始终是真的,请查看§8.7.1,其中标准描述了{ {1}}有效,在GetValue()被调用之前,可能会发生一些 magic 转换。

ToBoolean()运算符定义为§11.9.3
正如您所看到的,它没有指定操作数必须(或将被视为)数字,操作符的行为是不同的,并且由基于操作数类型的一系列规则来调节。然后你的第二个断言是假的。它们是数字(或其中一个是数字)的情况只是算法中的一个特例,请注意算法的第4点它表示如果其中一个是数字而另一个是字符串然后它将被转换为==,仅在这种情况下(具有此转换所具有的所有含义)。

如果您认为可以比较函数,字符串或数字,那么这是直观的,并非每种类型都可以转换为数值。