Показать сообщение отдельно
  #6 (permalink)  
Старый 08.11.2019, 02:37
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Andrew K
Возвращает неизменяемую копию.
Всё изменяется!
Вот настоящий неизменяемый объект...
var a = Object.freeze({
	id: Object.freeze({ value: 60 }),
	string: Object.freeze({ value: Object.freeze(["abc", 123]) })
});

// попробуем изменить
a.id.value = 77;

// не изменилось, а у вас изменяется
alert(a.id.value);


После вашей функции даже копия настоящего неизменяемого объекта становится изменяемой!

Сообщение от Andrew K
// Скопировать объект и вставить как значение возвращаемого объекта
newData = Object.assign({}, mainData);
Может стоит учитывать исходный конструктор при создании объекта? А то был неизменяемый объект без конструктора, а стал изменяемым и с конструктором...
var a = {
	__proto__: null,
	id: { value: 60 }
};


После вашей функции происходит неожиданная смена конструктора!

Объект без конструктора вы можете отсеять так...
mainData instanceof Object


Сообщение от Andrew K
// Если это массив...
if(toString.call(mainData) === "[object Array]") {
А если это структура, которая была унаследована от класса Array. Почему её нельзя использовать? Может стоит определять так...
mainData instanceof Array


А если это типизированный массив?
Ответить с цитированием