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

Javascript 为什么+true不等于true.valueOf?,javascript,coercion,Javascript,Coercion,在Javascript类型协同中,为求值调用的函数是valueOf。但是如果函数被显式调用,它将返回一个不同的值。如果使用==则会发生Javascript中的类型协同,这是一个比较松散的比较运算符 ==是严格的比较运算符,它在比较时不强制类型,因此它仍然是一个整数,而另一个为bool +true // result: 1 true.valueOf() // result: true +true === true.valueOf() // result: false identity==运算

在Javascript类型协同中,为求值调用的函数是valueOf。但是如果函数被显式调用,它将返回一个不同的值。

如果使用==则会发生Javascript中的类型协同,这是一个比较松散的比较运算符

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

+true // result: 1

true.valueOf() // result: true

+true === true.valueOf() // result: false
identity==运算符的行为与等式相同== 运算符,但未进行类型转换,并且类型必须是 同样的情况被认为是平等的


为什么true.valueOf不返回1

答案为true。valueOf返回true,这是布尔对象的基本值。此外,报价来自

布尔值的valueOf方法返回布尔值的原始值 对象或文本布尔值作为布尔数据类型

+true做什么:

+true与Numbertrue相同,众所周知,在几乎所有语言中0为false,1为true。事实上,在C++中,它们被用作布尔值。

严格比较,你应该这样做:< /P>
+true === true.valeOf() // false
+true == true.valueOf() // true
需要求值的函数是valueOf

不总是这样。valueOf仅对非基元类型有意义,因为它被定义为返回给定对象的基元值。true本身是一个布尔基元,因此调用true.valueOf是完全多余的

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


没有理由+true和true。valueOf应该都对应于相同的值。

我不明白+true将布尔值强制为数字。true.valueOf返回true。当然,1并不严格等于true。您正在比较布尔值和整数值,并想知道为什么它们不一样?问题是什么?为什么为true.valueOf不返回1为什么为true。valueOf未定义为返回数字。它返回对象的基本值。如果是bool,则返回bool。可能重复@WBAR What?X的一个实例可以是Y的值。你是什么意思?我想OP知道===是如何工作的,并且在问为什么+true不能返回与true完全相同的东西。valueOf.Type强制,就像将值强制为基元类型一样,确实发生在很多地方,不仅仅发生在==??@Bergi我对语言没有那么深入,所以我不知道这一点。从我在这里学到的回答,从上下文中,我做出了这样的陈述。编辑。谢谢
Number(true.valueOf()) === +true