Странная консоль.лог поведение в хроме - PullRequest
1 голос
/ 02 декабря 2011

Мне не удалось воспроизвести эту проблему с помощью другого сценария, поэтому, пожалуйста, запустите этот сценарий: http://jsfiddle.net/kz4k7/

Как видно из строки 154-157:

for (myKey in v){
    console.log("v["+myKey +"] = "+v[myKey]); 
}
console.log(v);

вы ожидаете, что первые три строки будут выводиться так же, как и последняя строка.Тем не менее, я получаю этот результат в chrome: enter image description here

Если я уберу solveTriangle (v) в строке 158, console.log(v); работает отлично.Это также работает, если я печатаю клонированную версию объекта v на консоль.

Примечание: Это еще не все, я просто хочу знать, почему Chrome делает это.Я также не хочу объяснять "почему ты так поступил?"и другие вопросы, не связанные с этой ошибкой.

Редактировать:

Это также поведение в Safari.

Firefox + скриншот firebug:

enter image description here

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Это довольно простая проблема. Chrome хранит ссылки на объект. Если вы посмотрите на объект после того, как ваш скрипт завершит работу, вы получите это наблюдаемое поведение, потому что объект изменился и не совпадает с тем, когда console.log срабатывает.

Если вы установите точку останова в строке, содержащей console.log(v);, и проверите значение, результат будет таким, как вы ожидали.

1 голос
/ 02 декабря 2011

console.log показывает, что объект содержит , когда вы открываете его (нажав стрелку), а не когда он был зарегистрирован. Честно говоря, ваш код довольно многословен и немного запутан с большим количеством закомментированного кода, но кажется, что вы действительно модифицируете объект после его регистрации.

Вы можете подтвердить это поведение журнала следующим упрощенным тестом: http://jsfiddle.net/e7Gvn/.

var o = {
    a: 1,
    b: 2
};

console.log( JSON.stringify(o) ); // force string logging, which doesn't change

console.log(o); // open the object and you'll see that `c = 3`...
o.c = 3;        // ... even though it was only set here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...