Отображение свойств массива в консоли Safari - PullRequest
5 голосов
/ 25 октября 2019

С учетом следующего фрагмента:

const myArray = ["foo", "bar", "baz"];
myArray.someProperty = "foobar";
console.log(myArray)

В Safari будет отображаться только это:

["foo", "bar", "baz"] (3)

В других браузерах, таких как Chrome и Firefox, будет отображаться свойство somePropertyвместе с собственными свойствами, такими как length:

Array(3)
  0: "foo"
  1: "bar"
  2: "baz"
  someProperty: "foobar"
  length: 3

Стоит отметить, что такие вещи, как console.dir, console.table или console.log(JSON.stringify(myArray)) не будут работать для отображения таких свойств.

Есть ли способ обойти это ограничение в Safari? Очевидно, я мог бы просто сделать console.log(myArray.someProperty), но моя главная цель - проверка , какие свойства у массива (я не тот, кто создает массив, он создается библиотекой JS), поэтому эти свойствамне неизвестно.

Ответы [ 2 ]

8 голосов
/ 27 октября 2019

Вам нужно сначала преобразовать его в Object

console.log(Object.assign({}, myArray))

Он покажет все свойства вашего массива

1 голос
/ 28 октября 2019

На основании принятого ответа Я могу даже вырезать цифровые ключи (которые являются общим содержимым массива) и регистрировать только свойства массива, если таковые имеются:

const myArray = ["foo", "bar", "baz"];
myArray.someProperty = "foobar";
myArray.someOtherProperty = "barbaz";

logArrayProperties(myArray)

function logArrayProperties(arr) {
  Object.entries(Object.assign({}, arr)).forEach(row => {
    if (isNaN(row[0])) console.log(row[0] + ": " + row[1])
  });
};
...