а) На языке, где все переменные в любом случае рассматриваются как объекты, почему оператор = различается guish [...]?
* 1005 Оператор * (назначить) не различает guish между примитивными и не примитивными типами данных. Это делает то же самое для обоих, учитывая, что равенство сохраняется после присваивания (исключая исключения, например NaN
, ...).
b) Почему копирование по значению невозможно для объектов?
Неправильное предположение в а) приводит к этому. Назначение не является копией и копия объекта не сохраняет равенство.
Или подумайте: var obj = {a: {b: 1}}
.
Что такое значение из obj.a
? Это просто ссылка на {b:1}
.
c) Какие приемы полезны для начинающего, который привык копировать объекты по значению в код без него?
Есть много подходов к этому. И два тривиальных случая.
В качестве первого случая известно расположение объекта. Таким образом, создается шаблон или конструктор и передаются все значения в соответствующие свойства.
В качестве второго случая предполагается использование объекта cycli c, содержащего все возможное в javascript (функции, регулярные выражения, символы, неопределенные,. ..) глубины n и строит что-то (не json.stringify
).
Для начала: возможный дубликат
Допущения:
примитивные и не примитивные типы данных имеют по умолчанию getter, setter, ...