为什么这两个表达式的不一致表现?

Hui*_*ang 3 javascript coercion

''.valueOf()// an empty string
false.valueOf()// false
Run Code Online (Sandbox Code Playgroud)

但为什么

+'' // 0
+false // 0
Run Code Online (Sandbox Code Playgroud)

我读了教程,数字转换的算法是:

如果valueOf方法存在并返回基元,则返回它.

否则,如果toString方法存在并返回基元,则返回它.

否则,抛出异常.

这是真实的情况下的冲突,如果是这样的规则,那么我认为两者''.valueOf()false.valueOf()应返回0.任何人都可以请让我知道可能的原因是什么?

Cer*_*rus 7

Object.prototype.valueOf()MDN页面:

valueOf()方法返回指定对象的原始值.

由于您正在调用valueOf()基元,因此它只返回那些基元.

(在JavaScript中,有6种原始数据类型:String,Number,Boolean,Null,undefined,Symbol(ES6))


现在,从Unary Plus (+)MDN页面:

一元加运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未).

基本上,+value相当于打电话Number(value).
无论Number('')Number(false)回报0.