Как проверить тип прокси es6 в Javascript? - PullRequest
2 голосов
/ 02 апреля 2019

Я работаю с ES6 Proxy. Я создал прокси массива, теперь, когда я проверяю тип прокси, он дает мне тип Object.

Вопрос:

Как я могу проверить, был ли созданный мной прокси для массива или объекта?

Пример:

const arr = ['a', 'b', 'c'];

const arrProxy = new Proxy(arr, {});

alert(typeof(arrProxy));

ОБНОВЛЕНИЕ (РЕШЕНИЕ): Вместо использования typeof мы должны использовать Array.isArray

const arr = ['a', 'b', 'c'];

const arrProxy = new Proxy(arr, {});

alert(Array.isArray(arrProxy));

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Вы не можете сказать, что прокси является прокси.Это их часть, они предоставляют фасад (который вы не можете обнаружить) вокруг другого объекта.

Насколько может судить код, глядя на ваш arrProxy, это массив:

const arr = ['a', 'b', 'c'];

const arrProxy = new Proxy(arr, {});

console.log(Array.isArray(arrProxy)); // true

Отдельно: typeof является очень общим, это дает вам "object" для огромного диапазона вещей: все, что угодноэто объект (не примитивный) тип (включая null).Так что typeof new Map(), typeof new Set(), typeof null, typeof document (в браузерах) и т. Д., Все даст вам "object".(Также обратите внимание, что typeof - это оператор, а не функция; вам не нужно () в вашем примере кода.)

1 голос
/ 02 апреля 2019

Существует также один способ сделать это, используя instanceof :

if (arrProxy instanceof Array) {
   console.log('This is an array!');
}
...