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