2017-08-17 27 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