[英]valueOf function set to always return the same value
这个:
% node
> var o = {valueOf: function() { return 5; } };
undefined
> o += 1;
6
> o
6
> o += 1;
7
> o
7
如果valueOf
总是返回5,为什么o
值增加?
从问题中看到o
引用对象的情况开始:
var o = {valueOf: function() { return 5; } };
然后在表达式中
o += 1;
发生的是:
o
的值通过调用.valueOf()
获得为数字。 1
,得到6
o
因此,曾经包含对对象的引用的变量o
现在包含一个数字。
这是因为您要分配o = 5
,然后通过执行+= 1
来递增值,然后查询新值(现在已更改)增加了一个,因此o = 6
。 在对象上进行第一次增量操作时,您正在从对象切换为值!
valueOf()
方法返回指定对象的原始值。 上面发生的是
首先将o
分配为以下对象,
var o = {valueOf:function(){return 5; };
当您使用o += 1;
,您在这里使用o
作为primitive
类型,JavaScript调用valueOf
方法将object
转换为primitive
类型
因此, o
不再是object
而是转换为primitive
类型,其值为6 = 5 + 1
并以o += 1;
开始递增o += 1;
希望它能澄清。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.