Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下面的乘法是如何工作的?_Javascript - Fatal编程技术网

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

Javascript 下面的乘法是如何工作的?,javascript,Javascript,我无法理解以下内容: 3 * { valueOf: function(){ return 5} } //outputs 15 当我尝试这样使用时: 3 * { 5 } //syntax-error 3 * {valueOf: 5} //outputs NaN 那么,这对{}有什么作用呢?区别在于valueOf是一个返回数字的函数,还是仅仅是一个数字。必须是对象上的函数,因此不使用数字版本 规范讨论了valueOf应该如何工作,指出在尝试转换对象时必须可以调用它: 让valueOf作为调用对

我无法理解以下内容:

3 * { valueOf: function(){ return 5} }
//outputs 15
当我尝试这样使用时:

3 * { 5 }
//syntax-error

3 * {valueOf: 5}
//outputs NaN

那么,这对
{}
有什么作用呢?

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

规范讨论了
valueOf
应该如何工作,指出在尝试转换对象时必须可以调用它:

  • 让valueOf作为调用对象O的[[Get]]内部方法(参数为“valueOf”)的结果
  • 如果IsCallable(valueOf)为真,
  • 让val作为调用valueOf的[[Call]]内部方法的结果,其中O作为this值和一个空参数列表
  • 如果val是基本值,则返回val
  • 这似乎不存在任何不能调用
    x.valueOf
    的情况,这就是为什么
    {valueOf:5}
    示例不起作用的原因

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


    请注意,
    3*{valueOf:function(){return“5”}
    工作正常,因为
    “5”
    可以正常运行(遵循正常强制规则)。

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

    规范讨论了
    valueOf
    应该如何工作,指出在尝试转换对象时必须可以调用它:

  • 让valueOf作为调用对象O的[[Get]]内部方法(参数为“valueOf”)的结果
  • 如果IsCallable(valueOf)为真,
  • 让val作为调用valueOf的[[Call]]内部方法的结果,其中O作为this值和一个空参数列表
  • 如果val是基本值,则返回val
  • 这似乎不存在任何不能调用
    x.valueOf
    的情况,这就是为什么
    {valueOf:5}
    示例不起作用的原因

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


    请注意,
    3*{valueOf:function(){return“5”}
    工作正常,因为
    “5”
    可以正常运行(遵循正常强制规则)。

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


    在您的示例中,您将
    valueOf
    设置为5,这不是javascript可以调用的函数
    valueOf
    是对象上的一个特殊属性。当对象具有作为函数的
    valueOf
    属性时,将调用该函数以获取对象的文本值


    在您的示例中,您将
    valueOf
    设置为5,这不是javascript可以调用的函数
    valueOf
    是在对象转换为数字时调用的函数。转换的结果是函数的返回值。(在本例中,对象是对象文字。)如果不提供这样的函数,它将不会转换为数字。(在第二种情况下,您没有对象文字,有语法错误,在第三种情况下,您的
    valueOf
    成员不是函数,因此无法调用它。)您正在用自己的函数覆盖函数。自动调用此函数以将对象转换为基本体。第二种情况是语法错误,第三种情况是您没有提供函数。很抱歉,我不理解3*{}…获取一个好的资源并查找valueOf up:@BhojendraNepal,因为它是一个奇怪的构造。当您要乘以的对象中有一个valueOf函数时,将调用该函数以确定3乘以
    valueOf
    的值是一个函数,该函数在对象转换为数字时调用。转换的结果是函数的返回值。(在本例中,对象是对象文字。)如果不提供这样的函数,它将不会转换为数字。(在第二种情况下,您没有对象文字,有语法错误,在第三种情况下,您的
    valueOf
    成员不是函数,因此无法调用它。)您正在用自己的函数覆盖函数。自动调用此函数以将对象转换为基本体。第二种情况是语法错误,第三种情况是您没有提供函数。很抱歉,我不理解3*{}…获取一个好的资源并查找valueOf up:@BhojendraNepal,因为它是一个奇怪的构造。当您要乘以的对象中有一个函数值时,会调用该函数来确定3与orry的乘积,但不了解乘法是如何工作的。。替代方案是什么?所以我能理解…别无选择。这就是为什么在定义
    valueOf
    方法时它会起作用,因为VM正在寻找并调用该方法作为应用乘法运算符的一部分(参见第11.5节,步骤4)。
    3*{valueOf:function(){return 5}}。valueOf()
    也会起作用,我认为valueOf在
    3*{valueOf:function()中会自动调用{return 5}
    ??正确。您可以自己调用
    valueOf