2013-10-14 2 views
1

Я изучаю javascript. И я смущен, как работает приведенный ниже пример? Я создал объект person и я задаю его значение Person2.Почему значение второго объекта не меняется?

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

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

Почему значение Person2 не меняется, даже если person был назначен новый value.?Is, потому что я передаю ссылку. Я не понимаю, с какой целью. Какую концепцию мне не хватает?

+0

чем проблема? ** Person2 ** печатает привет, потому что это значение ** человека ** в момент его назначения. –

+0

Обратите внимание, что ваш код 'var person =" hello ";' не соответствует выражению "Я создал объект' person' ". , , 'person' является примитивным, в частности, строкой, поэтому не является объектом. , , – ernie

ответ

2

Вы имеете дело с primitive в JavaScript - строка является примитивной (так булево, число, неопределенным и нулевым). Примитивы назначаются по значению, а не по ссылке.

Массивы и объекты назначаются по ссылке.

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

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

Это потому, что вы не передачи ссылки (по крайней мере, не один, что указывает на person)

Вы не изменили значение Person2 поэтому значение остается "hello" который является единственным значением, вы назначили ему.

+0

Хотя это правда, этот ответ не уточняет разницу между тем, как JavaScript присваивает значения примитивов и объектов, что и является реальным ответом. – Adam

0

Вы устанавливаете значение person2 на значение человека, после чего вы меняете значение лица после этого. Значение person2 не изменится.

0

Строки и числа (примитивы) НЕ передаются по ссылке, это относится только к объектам или массиву (массивы - это объекты строго). Поэтому присваиваем его новой переменной COPIES string.

Чтобы передать его по ссылке вы бы использовать что-то вроде

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

person === Person2 // true 
1

Давайте пошагово, что происходит в вашем коде ...

1: var person = "hello"; 
2: var Person2 = person; 
3: person = "hey"; 
4: console.log(Person2); 
5: console.log(person); 
  1. лицу присваивается ссылка на новую строку объекта «привет».
  2. Person2 присваивается по ссылке существующая строка «привет».
  3. человеку присваивается ссылка на новый строковый объект «эй».
  4. Person2 указывает на строку «Привет», так это выход
  5. человек указывает на строку «эй», так это выход
Смежные вопросы