Массив ведет себя по-разному в Nodejs и браузере

#javascript #node.js #arrays #object

#javascript #node.js #массивы #объект

Вопрос:

У меня есть этот фрагмент кода :

 let a = {};
a.x = 'John';

let b = [];
b['y'] = a;
console.log(b);

a.x = 'Dan';
console.log(b)


 

Я запустил этот код в NodeJS с помощью командной строки и запустил его в консоли браузера Chrome.

Результат: в NodeJS результатом был [ y: { x: ‘John’ } ] [ y: { x: ‘Dan’ } ] Результат NodeJS

Результат: в консоли браузера Chrome результатом было: [ y: { x: ‘Dan’ } ] [ y: { x: ‘Dan’ } ] Результат браузера

Почему он дает разные результаты в консоли узла и браузера? Может кто-нибудь, пожалуйста, объяснить, что здесь происходит на самом деле?

Комментарии:

1. b['y'] = a; неправильный синтаксис

2. @FlashThunder Я тоже нашел это подозрительным, но, по-видимому, здесь нет синтаксической ошибки, поскольку массив является объектом.

3. да, но именно поэтому он интерпретируется по-разному, поскольку это недопустимый javascript

4. Результат Chrome — это то, что я ожидаю. Я удивлен, увидев заявленный результат в Node.js .

5. @FlashThunder Почему это недопустимый JS? Массив является объектом и поэтому может быть подписан строкой. Изменение на эквивалент b.y = a дает те же результаты.

Ответ №1:

Консоль браузера Chrome показывает вам текущее значение объекта, то есть обновляет отображаемые значения по мере его изменения, консоль узла js этого не делает.
Поэтому, когда вы сделали первую консоль.в журнале он будет отображаться так же, как и в node, но при изменении его значения a оно было обновлено в первом console.log.

Ответ №2:

Здесь происходят две вещи.

  1. Консоль Chrome по умолчанию показывает нерасширенный объект внутри массива — [y: {...}]
  2. Консоль Chrome, похоже, отслеживает значение переменной и показывает обновленное значение, когда вы нажимаете, чтобы развернуть журнал.

Если вам нужно проверить, что журналы на самом деле такие же, как в node.js , вы можете использовать JSON.stringify() или console.table() вместо console.log()

Комментарии:

1. Другим способом было бы просто войти b.y