Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Symbol.toPrimitive 与 Date 类型

  ES6 把对象转基本类型的具体实现也以 Symbol.toPrimitive 的形式提供出来了,记得以前经常纠结「==」运算符的细节,如今感觉又要被规范打脸了。虽然代码的执行结果还是和以前 ES5 时代一样,但有了 Symbol.toPrimitive 以后,分析这个问题的角度就不再和以前一样了。
  以前在分析一个对象转换成基础类型时,针对日期类型有一个特殊的处理。对于规范而言,这样的「特殊处理」当然是越少越好的。所以 Date 这种特殊的性质如果通过 Symbol.toPrimitive 来描述的话就没有原来那种 hard code 的感觉了。
  Date 的原型对象上有 Symbol.toPrimitive 方法,这个方法定义了优先使用 toString 的结果。如果我们把这个方法删除掉,那么它将不再具有这个性质。 <script> class A extends Date {} Object.defineProperty(A.prototype, Symbol.toPrimitive, { value: void 0 }); var a = new A(0); console.log(a + ''); // 0 </script>   或者如果我们把 Date 的 Symbol.toPrimitive 放到普通对象上,普通对象也会优先使用 toString 来做基础类型转换。 <script> var obj = { toString: () => 1, valueOf: () => 2, [Symbol.toPrimitive]: Date.prototype[Symbol.toPrimitive] }; console.log(obj + ''); // 1 </script>
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^