隐式转换的笔试题


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

看到有个+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)