我已經看到這個問題被多次詢問,但我有一個具體的例子來澄清。JavaScript通過引用或值傳遞?
var a = {animal: 'cat'};
var b = a;
a.animal = 'bear';
在這裏,我看到b.animal會給出一個輸出「熊」。這是爲什麼?如何保留變量b的原始參考「貓」?
我已經看到這個問題被多次詢問,但我有一個具體的例子來澄清。JavaScript通過引用或值傳遞?
var a = {animal: 'cat'};
var b = a;
a.animal = 'bear';
在這裏,我看到b.animal會給出一個輸出「熊」。這是爲什麼?如何保留變量b的原始參考「貓」?
是,both refer to the same object定義它writeable:false
。
可能會讓你感到困惑,因爲在Javascript中,即使可以,通常也不會在內置類型上使用「新」關鍵字。
你也可以申報「一」是這樣的:
var a = new Object();
a.animal = "cat";
現在也許是更清楚爲什麼「B」的變化時,「一」的轉變。
如果你「b」有它自己的屬性,那麼you have to clone "a"。
您應該複製對象而不是複製引用(b = a);
這裏有一個問題,在那裏這個問題是很好的解釋: How do I correctly clone a JavaScript object?
「基元」被複制,對象不是(即,參考它被複制)。 如果你需要保護的財產,通過defineProperty
您已將a *引用*從'a'複製到'b',但它們都指向相同的對象*。如果要複製對象,則需要將該對象的每個屬性複製到一個新對象。 –
看看這個問題:http://stackoverflow.com/q/122102/522479 –
它是由值,但值是一個對象引用。所以,'b'是'a'的副本,但它們仍然指向同一個對象。 [JavaScript是傳遞引用還是傳值語言?](http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value語言) –