Почему instanceof Array возвращает false для массива?

#javascript #arrays

#javascript #массивы

Вопрос:

Почему instanceof Array возвращает false для массива.

Смотрите данное изображение для получения дополнительной информации.

введите описание изображения здесь

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

1. Можете ли вы показать, как создается pricelists ?

2. Может быть, это происходит из другого фрейма? Вот почему вы должны использовать Array.isArray not instanceof Array .

Ответ №1:

Данные должны быть проанализированы из строки json, прежде чем проверять, является ли это массивом.

Вместо этого вы можете использовать Array.isArray , чтобы проверить, является ли данное значение массивом.

 const numbers = [1,2,3];
const obj = {};

console.log('is Array?', Array.isArray(numbers))
console.log('is Array?', Array.isArray(obj))

// however, this should also work
console.log(numbers instanceof Array)  

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

1. Как выглядят строковые данные?

Ответ №2:

res.extra_info.pricelists похоже, что это строка JSON. После того, как вы проанализируете его, вы получите объект с массивом pricelists . Чтобы подтвердить это, проверьте Array.isArray(res.extra_info.pricelists) .

Обновление:
typeof(res.extra_info.pricelists) не будет работать, потому что оно оценивает его как object — см. Комментарий ниже. Используйте Array.isArray вместо этого.

Регистрация строки JSON в консоли, по-видимому, расширяет ее:

введите описание изображения здесь

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

1. Если бы это была строка JSON, она не была бы расширяемой, как массив объектов в консоли.

2. Это неправильно, потому что typeof [] === "object" , typeof {} === "object" и typeof null === "object" .

3. Да, это было бы расширяемо. Отредактирует ответ, чтобы включить образец. @AluanHaddad хорошая мысль, я обновлю ответ на Array.isArray . Этот ответ действительно такой же, как у Алана, но я оставлю его.