Оператор list [0] = person;
загружает ссылку на объект (person) в первый индекс массива.
Таким образом, любая модификация объекта также обновляет объект внутри списка и наоборот. потому что объекты передаются как ссылки, а не как значения.
, поэтому после этой person.ID = 3;
консоли первого индекса также выведите 3
.
Если вы хотите избежать этого, вы можете сделать копию объекта, прежде чем вставлять в массив.
Для копирования вы можете использовать Object.assign({},person)
, который делает поверхностную копию объекта
Теперь следующий код не печатает 3.
var person = {};
person.name = "John";
person.surname = "Connor";
var list = [];
list [0] = Object.assign({},person); //In here i did not generate ID
person.ID = 3;
console.log(list[0].ID);