Javascript

时间:2016-08-09 07:19:45

标签: javascript

在以下两个片段中:

​var person = "Kobe";  
​var anotherPerson = person; // anotherPerson = the value of person​
person = "Bryant"; // value of person changed​
​
console.log(anotherPerson); // Kobe​
console.log(person); // Bryant

如果我们使用Object:

var person = {name: "Kobe"};
​var anotherPerson = person;
person.name = "Bryant";
​
console.log(anotherPerson.name); // Bryant​
console.log(person.name); // Bryant

第一个记录变量anotherPerson的“Kobe”,但如果anotherPerson引用了变量人,那么任何发生的变化都应该反映另一个人的权利吗?

任何人都可以详细解释这个

谢谢

3 个答案:

答案 0 :(得分:1)

在第一个示例中,您有两个引用"Kobe"的变量。虽然通过将"Bryant"分配给person变量,但您正在更改该变量的引用。所以最后你得到2个变量,每个变量引用另一个字符串。由于JS中的原始类型是不可变的,因此无法“更改字符串的值”。您只能指定一个新字符串。

enter image description here

在你的第二个例子中,你只是改变了你引用的对象的属性,尽管引用当然保持不变。

enter image description here

答案 1 :(得分:1)

variable可以包含两种类型的值之一:原始值和参考值。

  1. Primitive values是存储在堆栈中的数据。
  2. Primitive value直接存储在变量访问的位置。
  3. Reference values是存储在堆中的对象。
  4. 存储在变量位置的
  5. Reference value是指向存储对象的内存中的位置的指针。
  6. Primitive types包括Undefined,Null,Boolean,Number或String。
  7. 基础知识

    对象是属性的聚合。属性可以引用对象或基元。基元是值,它们没有属性。

答案 2 :(得分:1)

  1. 在第一个示例中,您将变量的值复制到新变量。因此创建了2个变量。因此,人员值不会更改 (除了对象之外的所有类型都定义了不可变值(值,无法更改)。)
  2. 在对象中,数据将存储在 堆(内存)中。 因此,如果更改Objects [key]的值,将更改Main对象中该键的值
  3. 如需更多见解,请参阅: