Сообщение от 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
А если это типизированный массив?