为什么第二个对象的值不会改变?

时间:2013-10-14 16:23:29

标签: javascript

我正在学习javascript。我对以下示例如何工作感到困惑?我创建了一个对象person,我将其值分配给Person2.

var person = "hello";  
var Person2 = person; 
person = "hey"; 

console.log(Person2); // prints hello
console.log(person); //prints hey

为什么Person2的值没有变化,即使已为person分配了新值。这是因为我传递的是引用。我不清楚其实施情况。我错过了什么概念?

5 个答案:

答案 0 :(得分:2)

您正在处理JavaScript中的primitive - 字符串是基元(因此是布尔值,数字,未定义和null)。基元由值分配,而不是通过引用分配。

通过引用分配数组和对象。

var person = ['test'];
var person2 = person;
person[0] = 'hi';

console.log(person); //['hi'];
console.log(person2); //['hi'];

答案 1 :(得分:1)

让我们逐步了解代码中发生的事情......

1: var person = "hello";  
2: var Person2 = person; 
3: person = "hey"; 
4: console.log(Person2);
5: console.log(person);
  1. person被赋予对新字符串对象“hello”的引用。
  2. Person2通过引用分配现有字符串“hello”。
  3. person被赋予对新字符串对象“hey”的引用。
  4. Person2指向“hello”字符串,因此输出
  5. person指向“hey”字符串,因此输出

答案 2 :(得分:0)

这是因为你传递引用(至少不是指向person

您尚未更改Person2的值,因此值仍为"hello",这是您为其分配的唯一值。

答案 3 :(得分:0)

您将person2的值设置为person的值,然后您将更改person的值。 person2的值不会改变。

答案 4 :(得分:0)

字符串和数字(​​基元)不是通过引用传递的,这只是对象或数组的情况(数组是严格的对象)。因此,将其分配给新变量会复制字符串。

要通过引用传递它,您将使用类似

的内容
var person = {message: "hello"};
var Person2 = person;
person.message = "Hey";

person === Person2 // true