首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下面的乘法是如何工作的?

下面的乘法是如何工作的?
EN

Stack Overflow用户
提问于 2015-02-05 04:49:36
回答 2查看 41关注 0票数 1

我不能理解以下几点:

代码语言:javascript
复制
3 * { valueOf: function(){ return 5} }
//outputs 15

当我尝试这样使用时:

代码语言:javascript
复制
3 * { 5 }
//syntax-error

3 * {valueOf: 5}
//outputs NaN

那么,这到底是如何与{}协同工作的呢?

EN

回答 2

Stack Overflow用户

发布于 2015-02-05 04:52:51

区别在于valueOf是一个返回数字的函数,还是仅仅是一个数字。The valueOf method必须是对象上的函数,所以不使用数字版本。

该规范讨论了valueOfsection 8.12.8中应该如何工作,声明它必须是可调用的,才能在尝试转换对象时考虑:

  1. 设valueOf是使用参数"valueOf“调用对象O的[Get]内部方法的结果。
  2. 如果IsCallable( valueOf )为true,则
    1. 让val为调用valueOf的[Call]内部方法的结果,其中O为this值,参数列表为空。
    2. 如果val为原始值,则返回true

这似乎不存在x.valueOf不可调用的情况,这就是{valueOf: 5}示例不起作用的原因。

第一种情况(3 * { 5 })是一个语法错误,但是即使在右边有一个有效的对象,也不会起作用,因为规范的section 11.5试图将正确的操作数转换为一个数字,除非您定义了一个valueOf方法,该方法返回一些可以转换的内容。

请注意,3 * { valueOf: function(){ return "5"} }工作得很好,因为"5"可以通过toNumber运行得很好(遵循正常的强制规则)。

票数 5
EN

Stack Overflow用户

发布于 2015-02-05 04:52:53

valueOf是对象上的一个特殊属性。当对象具有函数的valueOf属性时,将调用该函数来获取该对象的文字值。

在您的示例中,您将valueOf设置为文字5,这不是javascript可以调用的函数

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

https://stackoverflow.com/questions/28331148

复制
相关文章

相似问题

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