为什么+ true不等于true.valueOf?

时间:2014-11-28 13:39:55

标签: javascript coercion

+true // result: 1

true.valueOf() // result: true

+true === true.valueOf() // result: false

在Javascript Type Coercion中,要求评估的函数是valueOf()。但是如果显式调用该函数,则返回不同的值。

3 个答案:

答案 0 :(得分:3)

如果使用==,则会在Javascript中输入Coersion,这是有点松散的比较运算符。

===严格比较运算符,在比较时不强制类型,因此它仍然是整数而另一个是bool

+true === true.valeOf() // false
+true == true.valueOf() // true

Docs:

  

标识(===)运算符的行为与等式(==)完全相同   运算符除了没有进行类型转换,类型必须是   同样被认为是平等的。

     

为什么true.valueOf()不返回1

答案是true.valueOf返回true,这是布尔对象的原始值。报价也来自MDN

  

Boolean的valueOf方法返回布尔值的原始值   object或literal Boolean作为布尔数据类型。

+true做了什么:

+trueNumber(true)相同,众所周知,几乎每个0都是false1true语言。实际上在C ++中, 用作布尔值。

答案 1 :(得分:0)

严格比较你应该这样做:

Number(true.valueOf()) === +true

答案 2 :(得分:0)

  

要求评估的函数是valueOf()

并非总是如此。 valueOf()仅对非基本类型有意义,因为它被定义为返回给定对象的原始值。 true本身就是一个布尔基元,因此调用true.valueOf()将是完全冗余的。

一元+-符号运算符始终根据定义返回一个数字。由于布尔值很方便地转换为数字,因此+true返回1才有意义。

没有理由+truetrue.valueOf()都应该对应相同的值。