作者回复: 赞!
的确,这是除NaN之外我认为最可行的一个答案。事实上,这也是我在课程中提升“动态语言特性”这个方向的原因:一部分动态特性是基于OOP来实现的,这正是JavaScript的混合语言特性的应用。
不过这个例子其实可以变成更简单。例如:
```
Object.defineProperty(global, 'x', { get: Symbol })
// 或
Object.defineProperty(global, 'x', { get: Math.random })
```
AND, @晓小东 给出的Symbol()方案对这个getter方法是一个很好的补充,很好地利用了“symbol总是唯一”的特性。
作者回复: 参见 @sprinty 的答案。呵呵,我自己也不知道有没有更多的可能了。
作者回复: 浏览器把引擎包了一层,你执行的不是真正的引擎环境。
在node中用如下命令行试试:
```
> node -p -e '{} + {}'
NaN
> node -p -e '{} + []'
0
```
作者回复: 是的呀。
> 总结是: 在toPrimitive()中要获取五种值类型数据包括undefined 和 null, ...
------
在上一小节里不是讲过了么?原文是:
> > 一种关于“原始值”的简单解释是:所有 5 种能放入私有槽(亦即是说它们有相应的包装类)的值(Values),都是原始值;并且,再加上两个特殊值 undefined 和 null,那么就是所谓原始值(Primitive values)的完整集合了。
> 只要valueOf 返回五种值类型数据, 就不会toString()方法, 反之如果还是对象类型,即使是包装对象实例,还是会调用toString方法...
----
这在这一讲的“步骤4”中也讲到了。原文是:
> > 这需要利用到对象的valueOf()和toString()方法:当预期是“number”时,valueOf()方法优先调用;否则就以toString()为优先。并且,重要的是,上面的预期只决定了上述的优先级,而当调用优先方法仍然得不到非对象值时,还会顺序调用另一方法。
最后,关于Date()类型中顺序相反的问题,本讲里也是解释了的哟哟哟哟~ ^^.
作者回复: 绝对是还有的。至少一个。^^.
作者回复: Here:
https://tc39.es/ecma262/#sec-toboolean
作者回复: 参见 @sprinty 的答案哟。总算有人给出来这个标准答案了。呵呵~