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

296
21 июня 2017, 02:37

Написал простой пример с изменением объекта в функции при передаче по ссылке. 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
Как поменять стили при наведении на div?

Как поменять стили при наведении на div?

Приветствую! Просьба помочь, у меня есть класс "parent", который содержит класс "children", хочу сделать, что бы при наведении на парент, мой чилдрен...

268
AJAX JSF h:inputText

AJAX JSF h:inputText

Есть facelet terminologyxhtml

385
Подключение css файлов в webpack 2 (ReferenceError: ExtractTextPlugin)

Подключение css файлов в webpack 2 (ReferenceError: ExtractTextPlugin)

Пытаюсь подключить css файл в webpack 2Для этого устанавливаю "css-loader","file-loader","less-loader","sass-loader","style-loader", "extract-text-webpack-plugin","url-loader"; создаю отдельный...

459