我一直以为JavaScript中有原始类型和引用类型。在日常工作中,我从未受到过这方面的影响,但最近开始接触更多的JS并希望更新我的“思考”。换句话说,我本来会打赌$20以下代码会返回68:
var my_obj = {};
var tmp_obj = {};
tmp_obj.my_int = 38;
my_obj.tmp_val = tmp_obj.my_int;
tmp_obj.my_int = 68;
alert('68 means reference, 38 means primitve: ' + my_obj.tmp_val);
但它返回 38。
即使一个数字存在于引用类型的上下文中,它们所有实例是否都是原始类型?如果是,我感到非常惊讶,并且发现这种行为很奇怪(那我就会少 20 美元)。或者我的示例并没有展示我认为的内容?
提前感谢。
更新 #1
哇,感谢所有的回答。这里有一个稍微更改过的示例,它帮助我更好地理解:
var my_obj={};
var tmp_obj={};
var my_obj_2=tmp_obj;
tmp_obj.my_int=38;
my_obj.tmp_val=tmp_obj.my_int;
tmp_obj.my_int=68
alert('68 means reference, 38 means primitve: ' + my_obj.tmp_val); // 38
alert('68 means reference, 38 means primitve: ' + my_obj_2.my_int); // 68
my_obj_2.my_int=78;
alert(tmp_obj.my_int); // tmp_obj is now 78 ie two way
my_obj
和tmp_obj
是两个独立的对象。更改其中一个对象属性的值不会影响另一个对象,无论原始值来自何处。对于var a = 1; var b = a; a = 2;
...b
仍然是1
。 - Felix Klingtmp_obj = my_obj; tmp_obj.my_int = 68; alert(my_obj.my_int)
。 - bfavaretto