隐式转换的笔试题
有群友在群里这样问,我无聊就看了看题目,前两道看了一眼有了个思路,第三题没啥思路,于是思考了一下


看到有个+obj然后想到了js的隐式转换,然后尝试写了写,把obj的toNumber重写一下,然后发现obj.__proto__没有toNumber,然后翻了翻书,发现书上这样写道
在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。布尔值false和true将被转换为0和1,字符串会被按照一组特殊的规则进行解析,而对象时先调用它们的valueOf()和(或)toString()方法,再转换得到的值。
然后把改为valueOf就好了
var obj = {
monday: 15,
tuesday: 12,
wednesday: 18,
thurday: 20,
friday: 32
}
obj.__proto__.valueOf = function() {
return 97
}
var sum =+ obj
console.log(obj)
console.log(sum)