首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symbol.toPrimitive vs Object.prototype.valueOf

Symbol.toPrimitive vs Object.prototype.valueOf
EN

Stack Overflow用户
提问于 2015-01-01 19:07:07
回答 1查看 5.1K关注 0票数 36

在ECMAScript 6中,引入了一个新的Symbol.toPrimitive符号,当用作对象键时,should define函数返回对象的原始值:

代码语言:javascript
复制
let object = {
    aNumber: 0,
    [Symbol.toPrimitive]() {
        return this.aNumber;
    }
};

object.aNumber = 5;
console.log(object + 2) // 7

但是,还可以重新定义Object.prototype.valueOf函数according to the documentation,以将对象转换为原始值:

代码语言:javascript
复制
let object = {
    aNumber: 0,
    valueOf() {
        return this.aNumber;
    }
};

object.aNumber = 5;
console.log(object + 2) // 7

那么,在定义新对象时,在ES6中应该使用哪些将对象转换为其原始值的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-01 19:58:50

Symbol.toPrimitive的主要目的是更改toStringvalueOf在不同强制方案中的调用顺序。

Date原生对象就是一个这样的例子,默认情况下,它会将值转换为字符串而不是数字:

代码语言:javascript
复制
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的原因。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27730211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档