Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не понятно почему так работает код Javascript


Автор: zammar 26.11.2013, 09:48
arr - массив объектов
setObj - объект, данные которого нужно внести(заменить) в массиве arr

Я предполагаю, что в коде первый console.log должен вывести неизменный массив arr, а уже второй должен показать arr с изменениями.

К моему удивлению оба вызова console.log выдают ОБНОВЛЕННЫЙ массив arr.

т.е. вопрос в том почему первый вызов console.log (до изменений массива arr) выводит обновленный arr


Код

var setObj = {"t":"333", "tr":"333"};
var arr = [];
arr[0] = {"t":"1", "tr":"1", "dd":"11"};

console.log(arr);

                for(ind in setObj)
                {
                    arr[0][ind] = setObj[ind];
                }

console.log(arr);


Автор: ksnk 26.11.2013, 12:13
В console передается объект. Выводится этот объект консолью после того как он уже измениться. Вероятно, это следует считать багом теперешней хромовской консоли.

Для определенности, можно пользоваться простенькой функцией "json'ификации" объекта. Объект превращается в свое строковое представление. Json некорректный, но "напосмотреть" - пойдет ;)
Код

function printobj(o){
    if(o instanceof Array) {
        var result=[];
        for(var i=0;i<o.length;i++)
        {
           result.push(printobj(o[i]));
        }
        return '['+result.join(',')+']';
    } else if(null== o ){
        return 'null';
    } else if (typeof(o)=='object') { // object
        var result=[];
        for(i in o)if(o.hasOwnProperty(i))
        {
           result.push(i+':'+printobj(o[i]));
        }
        return '{'+ result.join(',')+'}';
    } else if (''===o) {
        return "''";
    } else if (typeof(o)=='string') { // object
        return "'"+o.replace("'","\\'")+"'";
    }else 
        return o;
}


тогда console.log(printobj(arr)); будет выдавать реальное состояние объекта.

Автор: zammar 27.11.2013, 09:07
Да, действительно. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)