valueOf函数设置为始终返回相同的值

时间:2016-11-05 12:55:46

标签: javascript

此:

% node
> var o = {valueOf: function() { return 5; } };
undefined
> o += 1;
6
> o
6
> o += 1;
7
> o
7

如果o总是返回5,为什么valueOf值会增加?

3 个答案:

答案 0 :(得分:3)

o引用对象的情况开始,如问题所示:

var o = {valueOf: function() { return 5; } };

然后在表达式

o += 1;

会发生什么:

  1. 通过调用o
  2. 获取.valueOf()的值作为数字
  3. 该值已添加到1,并提供6
  4. 该结果已分配给变量o
  5. 因此,变量o曾经包含对象的引用,现在包含一个数字。

答案 1 :(得分:0)

这是因为您正在分配o = 5,然后通过执行+= 1来增加值,然后您查询现在已更改的新值,增加1,因此{ {1}}。当您在对象上进行第一次增量时,您将从对象切换到值!

答案 2 :(得分:0)

valueOf()方法返回指定对象的原始值。上面发生的是,

    首先将
  1. o指定为对象,

    var o = {valueOf:function(){return 5; }};

  2. 当您使用o += 1;时,您使用o作为primitive类型,JavaScript调用valueOf方法转换object in到primitive类型

  3. 因此,o不再是object,而是转换为primitive类型,其值为6 = 5 + 1,并以o += 1;

  4. 希望它澄清。