#javascript #arrays
#javascript #массивы
Вопрос:
Почему instanceof Array
возвращает false для массива.
Смотрите данное изображение для получения дополнительной информации.
Комментарии:
1. Можете ли вы показать, как создается
pricelists
?2. Может быть, это происходит из другого фрейма? Вот почему вы должны использовать
Array.isArray
notinstanceof 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
. Этот ответ действительно такой же, как у Алана, но я оставлю его.