Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не понятно почему так работает код Javascript 
V
    Опции темы
zammar
Дата 26.11.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 30.10.2008

Репутация: нет
Всего: нет



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);


PM   Вверх
ksnk
Дата 26.11.2013, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



В 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)); будет выдавать реальное состояние объекта.

Это сообщение отредактировал(а) ksnk - 26.11.2013, 12:13


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
zammar
Дата 27.11.2013, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 30.10.2008

Репутация: нет
Всего: нет



Да, действительно. Спасибо.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.