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.任何人都可以请让我知道可能的原因是什么?
从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.