Странное поведение Javascript при передаче объекта по ссылке

142
31 января 2020, 09:00

Написал простой пример с изменением объекта в функции при передаче по ссылке. https://plnkr.co/edit/kR9zRc0Y...

var salaries = {
    "Вася": 100,
    "Петя": 300,
    "Даша": 250
};
function changeObject(object) {
    for (var key in object) {
        object[key] += 100;
    }
}
console.log(salaries);
changeObject(salaries);
console.log(salaries);

В итоге результат:

Object {Вася: 100, Петя: 300, Даша: 250}
Object {Вася: 200, Петя: 400, Даша: 350}

Передача по ссылке происходит, но console.log() отрабатывает не так как ожидается, как будто Chrome (Version 49.0.2623.110 (64-bit)) фиксирует состояние объекта на момент console.log(), хотя вроде должен ссылаться на один и тот же измененный объект.

Кто знает в чем может быть дело?

Answer 1

Суть заключается в том, как работает консоль в хроме. И конкретно, функция log.

Она выводит значение объекта в момент вывода, при этом, если для вывода всех свойств требуется много места, появляется возможность развернуть объект.

При этом можно заметить, что в свернутом виде будет показываться информация актуальная на момент вывода, но если развернуть

будет показано состояния объекта на момент разворачивания.

Чтобы избежать такой неоднозначности, можно использовать

console.dir

READ ALSO
Обучение JavaScript [дубликат]

Обучение JavaScript [дубликат]

Хочу по советоватьсяКак научиться JavaScript, то есть может есть какие либо ресурсы, книги

140
Объясните пожалуйста почему null?

Объясните пожалуйста почему null?

Извините, если вопрос глупый, но почему в данном случае в переменной x лежит null:

143
Как анимировать SVG фильтр FeComponentTransfer?

Как анимировать SVG фильтр FeComponentTransfer?

Кто-нибудь знает, как использовать тег animate в feFuncRGB в feComponentTransfer? У меня есть фильтр SVG, и мне нужно показать / скрыть его по щелчку с transition

127
Выборка по дате с количеством записей

Выборка по дате с количеством записей

Есть следующая таблица:

132