繁体   English   中英

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

[英]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;

发生的是:

  1. o的值通过调用.valueOf()获得为数字。
  2. 该值加到1 ,得到6
  3. 该结果分配给变量o

因此,曾经包含对对象的引用的变量o现在包含一个数字。

这是因为您要分配o = 5 ,然后通过执行+= 1来递增值,然后查询新值(现在已更改)增加了一个,因此o = 6 在对象上进行第一次增量操作时,您正在从对象切换为值!

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

  1. 首先将o分配为以下对象,

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

  2. 当您使用o += 1; ,您在这里使用o作为primitive类型,JavaScript调用valueOf方法将object转换为primitive类型

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

希望它能澄清。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM