在ECMAScript 6中,引入了一个新的Symbol.toPrimitive
符号,当它用作对象键时,should define一个返回对象原始值的函数:
let object = {
aNumber: 0,
[Symbol.toPrimitive]() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
但是,还有
Object.prototype.valueOf
函数according to the documentation可以重新定义以将对象转换为原始值:let object = {
aNumber: 0,
valueOf() {
return this.aNumber;
}
};
object.aNumber = 5;
console.log(object + 2) // 7
那么,在定义新对象时,应在ES6中使用以下哪种方法将对象转换为其原始值?
最佳答案
Symbol.toPrimitive
的主要目的是更改在不同强制方案中调用toString
和valueOf
的顺序。
一个示例是Date
native 对象,默认情况下它将把值转换为字符串而不是数字:
console.log(1 + new Date()); // "1Mon Aug 15 2016 13:25:31 GMT-0500 (EST)"
var a = new Date(1000);
console.log(a == 1000); // false
console.log(a == a.toString()); // true
如果您不打算这样做,那么应该只覆盖
obj.valueOf
和obj.toString
以匹配您想要的行为-这是大多数 native 对象在JavaScript中所做的。请注意,
valueOf
和 toString
应该都被覆盖,因为ToPrimitive抽象操作可能会调用它们中的任何一个来进行强制转换,这取决于调用ToPrimitive的原因。关于javascript - Symbol.toPrimitive与Object.prototype.valueOf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27730211/