【发布时间】:2016-08-13 21:22:25
【问题描述】:
v = {
toString: function () { return 'foo' },
valueOf: function () { return 5 }
}
console.log('' + v); //5
console.log(v); // { [Number: 5] toString: [Function], valueOf: [Function] }
为什么 v 对象的值是 5?
【问题讨论】:
-
答案对我来说似乎很明显。与字符串连接时,它似乎正在使用从
valueOf返回的值。 -
我不明白你在问什么。哪个对象的值是 5?只需在浏览器的控制台中尝试以下操作:
v = { valueOf: function () { return 5 }, toString: function () { return 'foo' } } temp = '' + v; Number.isInteger(temp);您会看到最后一个命令将打印出 false;因此空字符串加上一个对象似乎不等于一个数字。 -
@kamoroso94 我在问为什么 v 对象会从 valueOf 而不是 foo 从 toString 获取值,或者为什么它不会尝试向对象添加空字符串并返回类似 NaN 或未定义?
-
首先,你永远不会通过连接空字符串得到
undefined、null或NaN。你应该总是得到一个新的字符串。现在解释字符串连接调用v的valueOf方法的原因在这里stackoverflow.com/q/2485632/2727710 解释。所以这实际上可能是一个重复的问题。
标签: javascript string object addition