在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中应该使用哪些将对象转换为其原始值的方法呢?
发布于 2015-01-01 19:58:50
Symbol.toPrimitive
的主要目的是更改toString
和valueOf
在不同强制方案中的调用顺序。
Date
原生对象就是一个这样的例子,默认情况下,它会将值转换为字符串而不是数字:
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
和and以匹配您想要的行为--这是大多数本机对象在JavaScript中所做的事情。
请注意,valueOf
和 toString
都应该被覆盖,因为ToPrimitive抽象操作可以调用它们中的任何一个来强制执行,这取决于调用ToPrimitive的原因。
https://stackoverflow.com/questions/27730211
复制相似问题