此:
% node
> var o = {valueOf: function() { return 5; } };
undefined
> o += 1;
6
> o
6
> o += 1;
7
> o
7
如果o
总是返回5,为什么valueOf
值会增加?
答案 0 :(得分:3)
从o
引用对象的情况开始,如问题所示:
var o = {valueOf: function() { return 5; } };
然后在表达式
中o += 1;
会发生什么:
o
.valueOf()
的值作为数字
1
,并提供6
o
因此,变量o
曾经包含对象的引用,现在包含一个数字。
答案 1 :(得分:0)
这是因为您正在分配o = 5
,然后通过执行+= 1
来增加值,然后您查询现在已更改的新值,增加1,因此{ {1}}。当您在对象上进行第一次增量时,您将从对象切换到值!
答案 2 :(得分:0)
valueOf()
方法返回指定对象的原始值。上面发生的是,
o
指定为对象,
var o = {valueOf:function(){return 5; }};
当您使用o += 1;
时,您使用o
作为primitive
类型,JavaScript调用valueOf
方法转换object
in到primitive
类型
因此,o
不再是object
,而是转换为primitive
类型,其值为6 = 5 + 1
,并以o += 1;
希望它澄清。