''.valueOf()// an empty string
false.valueOf()// false
但为什么
+'' // 0
+false // 0
我阅读了教程,数字转换的算法是:
如果存在valueOf
方法并返回基元,则返回它。
否则,如果存在toString
方法并返回原语,则返回它。
否则,抛出异常。
这与真实情况有冲突,如果这是规则,那么我认为''.valueOf()
和false.valueOf()
都应该返回0.有人可以告诉我可能的原因吗?
答案 0 :(得分:7)
来自Object.prototype.valueOf()
MDN page:
valueOf()方法返回指定对象的原始值。
由于你在原语上调用valueOf()
,它只返回那些原语。
(在JavaScript中,有6个primitive data types:String
,Number
,Boolean
,Null
,undefined
,{ {1}}(ES6))
现在,来自Unary Plus (+)
MDN page:
一元加号运算符在其操作数之前,并计算其操作数,但是如果它已经没有,则尝试将其转换为数字。
基本上,Symbol
相当于调用+value
Number(value)
和Number('')
都返回Number(false)
。
答案 1 :(得分:4)
.valueOf
正在返回一个原语 - 空字符串。 false
也是原始的。
+
运算符是将变量转换为数字的简写。在这种情况下,它将false-y值转换为0 - 完全没有冲突。