+true // result: 1
true.valueOf() // result: true
+true === true.valueOf() // result: false
在Javascript Type Coercion中,要求评估的函数是valueOf()。但是如果显式调用该函数,则返回不同的值。
答案 0 :(得分:3)
如果使用==
,则会在Javascript中输入Coersion,这是有点松散的比较运算符。
===
是严格比较运算符,在比较时不强制类型,因此它仍然是整数而另一个是bool
+true === true.valeOf() // false
+true == true.valueOf() // true
标识(===)运算符的行为与等式(==)完全相同 运算符除了没有进行类型转换,类型必须是 同样被认为是平等的。
为什么true.valueOf()不返回1
答案是true.valueOf
返回true
,这是布尔对象的原始值。报价也来自MDN
Boolean的valueOf方法返回布尔值的原始值 object或literal Boolean作为布尔数据类型。
+true
做了什么:
+true
与Number(true)
相同,众所周知,几乎每个0
都是false
而1
是true
语言。实际上在C ++中, 用作布尔值。
答案 1 :(得分:0)
严格比较你应该这样做:
Number(true.valueOf()) === +true
答案 2 :(得分:0)
要求评估的函数是valueOf()
并非总是如此。 valueOf()
仅对非基本类型有意义,因为它被定义为返回给定对象的原始值。 true
本身就是一个布尔基元,因此调用true.valueOf()
将是完全冗余的。
一元+
和-
符号运算符始终根据定义返回一个数字。由于布尔值很方便地转换为数字,因此+true
返回1才有意义。
没有理由+true
和true.valueOf()
都应该对应相同的值。