【发布时间】:2021-08-28 06:29:44
【问题描述】:
我有这个代码。而且我不明白它是如何工作的。
let obj = {
valueOf: function () {
return {};
},
toString: function () {
return 222;
}
};
console.log(Number(obj)); //222
根据这个source,转换算法是:
- 如果方法存在则调用
obj[Symbol.toPrimitive](hint),- 否则,如果提示是“字符串”,请尝试
obj.toString()和obj.valueOf(),无论是否存在。- 否则,如果提示是“数字”或“默认”,请尝试
obj.valueOf()和obj.toString(),无论是否存在。
这里的提示是数字。那为什么会调用obj.toString()?没有obj.valueOf()吗?为什么?什么样的对象有这个方法?我找不到任何有用的信息。
还有一个例子:
var room = {
number: 777,
valueOf: function() { return this.number; },
toString: function() { return 255; }
};
console.log( +room ); // 777
为什么在这种情况下调用obj.valueOf()?为什么这里存在这种方法,而在第一个示例中却没有?它是如何工作的?
【问题讨论】:
标签: javascript object tostring value-of