Могут ли такие методы, как push и splice, изменять ссылки на объекты в ECMAScript? - PullRequest
2 голосов
/ 25 августа 2011

Интересно, всегда ли этот код работает как задумано:

var a = [0, 1];
var b = a;
b.push(2);
// a is now [0, 1, 2]

Могут ли теоретически такие методы, как 'push' или 'splice', изменить ссылку на переменную (скажем, если в предыдущем месте объекта недостаточно памяти)? Другими словами, может ли быть так, что a! = B в моем примере?

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Пока вы делаете b = a, обе переменные будут всегда ссылаться на одно и то же Array / Object.

Другая история, если вы делаете что-то вроде b = a.slice( 0 );, это создает новый, независимый Array.

1 голос
/ 25 августа 2011

Нет, методы, которые вы вызываете для объекта, не могут изменить ссылку на объект.

Чтобы метод мог изменить ссылку, вам необходимо отправить переменную, которую вы используетессылаться на объект в методе.Без этого метод знает только об объекте, он не знает о вашей переменной, которую вы используете для хранения ссылки, поэтому, если он изменит ссылку на объект, ваша переменная больше не будет указывать на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...