2017-08-17 29 views
-1

我有以下全局變量。在javascript中變更對象的實例

var name1 = "James"; 
var nameObj = { name: name1 }; 

在button button中,我改變變量name1中的值。在變量的name1實例中更改值正在發生變化。在下面找到我的代碼。

var name1 = "James"; 
 
var nameObj = { 
 
    name: name1 
 
}; 
 

 
function point() { 
 
    name1 = "James" 
 
    if (nameObj.name !== name1) { 
 
    alert("instance changed"); 
 
    } 
 
}
<button onclick="point()">Click</button>

反正有沒有改變NAME1的值,而不改變它的實例?

+0

更改變量不會更改對象。你在說什麼? – Barmar

+0

嘗試'name1 =「Fred」'然後'console.log(nameObj.name)'並且它會記錄'James' – Barmar

回答

3

不,因爲字符串是不可變的。 Here's a reference from MDN web docs:

與C語言不同,JavaScript字符串是不可變的。這意味着一旦創建了一個字符串,就不可能修改它。但是,仍然可以根據原始字符串上的操作創建另一個字符串。

+0

使用一個額外的臨時變量來存儲原始值:) –

+0

這與這個有什麼關係題?他不是試圖修改一個字符串,問題是關於變量和對象屬性之間的關係。 – Barmar

+0

我覺得他只是困惑。也許他認爲'=='比較字符串的身份而不是內容,所以他認爲賦值'name1 =「James」'應該創建一個新的字符串,即'!= nameObj.name' – Barmar