簡體   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