2016-08-09 3 views
1

В следующих двух фрагментах:Refrence тип данных и примитивный тип данных в 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 

И если мы используем объект:

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

Первый регистрирует «Кобе» для переменной anotherPerson но если anotherPerson имеет ли ссылка на переменную человека какие-либо изменения, произошедшие лично, также должны отражать право другого человека?

Может ли объяснить это в деталях

Благодарности

+0

Возможный дубликат [Является ли JavaScript пропуском по ссылке или передать по значению языка ?] (http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language) – haim770

ответ

1

В первом примере у вас есть 2 переменные, ссылающихся на "Kobe". Хотя, назначив "Bryant" переменной человека, вы меняете ссылку на эту переменную. Таким образом, в конце вы получили две переменные, каждая из которых ссылается на другую строку. Так как типы примитивов в JS неизменяемы, нет никакого способа «изменить значение строки». Вы можете назначить только новую строку.

enter image description here

В вашем втором примере вы только изменить свойство объекта вы ссылаетесь к, хотя ссылка остается тем же, конечно.

enter image description here

1

A variable может содержать один из двух типов значений: примитивных значений и эталонных значений.

  1. Primitive values - это данные, которые хранятся в стеке.
  2. Primitive value хранится непосредственно в месте доступа переменной.
  3. Reference values - это объекты, которые хранятся в куче.
  4. Reference value, хранящийся в переменном местоположении, является указателем на местоположение в памяти, где хранится объект.
  5. Primitive types Включает неопределенные, нулевые, булевы, числа или строки.

Основы

объекты являются агрегирование свойств. Свойство может ссылаться на объект или примитив. Примитивы - это значения, они не имеют свойств.

1
  1. В первом примере вы копируете значение переменной в новую переменную. Поэтому создаются 2 переменные. Таким образом, значение лица не изменяется(Все типы, кроме объектов определяют неизменные ценности (ценности, которые не способны быть изменены).)
  2. в объектах, данные будут храниться вкуче (памяти). Итак, если вы измените значение Objects [key], то измените значение этого ключа в главном объекте.

Для большего понимания см:

Смежные вопросы