我希望一个对象在数字上下文中返回一个值,而在字符串上下文中返回一个完全不同的值。以下无效。
foo = {
toString: function() { return "string" },
valueOf: function() { return 123 }
}
console.log(foo * 2) // got 246, fine
console.log("hi " + foo) // got "hi 123", want "hi string"
addition operator将使用内部抽象操作ToPrimitive
将两个操作数都转换为基元,然后,如果一个操作数是字符串,它将使用内部抽象操作ToPrimitive
将两个操作数都转换为字符串(请注意:与userland对象上的ToString
方法不同。)
结果是,在语言中添加ToString
后,您现在可以实现目标:
toString