我不能理解以下几点:
3 * { valueOf: function(){ return 5} }
//outputs 15当我尝试这样使用时:
3 * { 5 }
//syntax-error
3 * {valueOf: 5}
//outputs NaN那么,这到底是如何与{}协同工作的呢?
发布于 2015-02-05 04:52:51
区别在于valueOf是一个返回数字的函数,还是仅仅是一个数字。The valueOf method必须是对象上的函数,所以不使用数字版本。
该规范讨论了valueOf在section 8.12.8中应该如何工作,声明它必须是可调用的,才能在尝试转换对象时考虑:
这似乎不存在x.valueOf不可调用的情况,这就是{valueOf: 5}示例不起作用的原因。
第一种情况(3 * { 5 })是一个语法错误,但是即使在右边有一个有效的对象,也不会起作用,因为规范的section 11.5试图将正确的操作数转换为一个数字,除非您定义了一个valueOf方法,该方法返回一些可以转换的内容。
请注意,3 * { valueOf: function(){ return "5"} }工作得很好,因为"5"可以通过toNumber运行得很好(遵循正常的强制规则)。
发布于 2015-02-05 04:52:53
valueOf是对象上的一个特殊属性。当对象具有函数的valueOf属性时,将调用该函数来获取该对象的文字值。
在您的示例中,您将valueOf设置为文字5,这不是javascript可以调用的函数
https://stackoverflow.com/questions/28331148
复制相似问题