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
应该如何工作,指出在尝试转换对象时必须可以调用它:
x.valueOf
的情况,这就是为什么{valueOf:5}
示例不起作用的原因
第一种情况(3*{5}
)是一个语法错误,但即使右侧有一个有效的对象,在规范尝试将正确的操作数转换为数字时也不起作用,除非定义一个valueOf
方法,该方法返回可以转换的内容
请注意,
3*{valueOf:function(){return“5”}
工作正常,因为“5”
可以正常运行(遵循正常强制规则)。区别在于valueOf
是一个返回数字的函数,还是仅仅是一个数字。必须是对象上的函数,因此不使用数字版本
规范讨论了valueOf
应该如何工作,指出在尝试转换对象时必须可以调用它:
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