«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `typeof` возвращает «Объект» для массивов, содержащих объекты в JavaScript?

Почему `typeof` возвращает «Объект» для массивов, содержащих объекты в JavaScript?

Опубликовано 8 ноября 2024 г.
Просматривать:739

Why Does `typeof` Return \

Понимание противоречия: почему typeof Array with Objects возвращает «Object»

Разработчики могут столкнуться с удивительным явлением: при вызове typeof для массива содержащие объекты, он необъяснимым образом возвращает «объект» вместо «массив». В этой статье рассматривается это, казалось бы, противоречивое поведение.

Рассмотрев пример, давайте проиллюстрируем проблему:

$.ajax({
    url: 'http://api.twitter.com/1/statuses/user_timeline.json',
    data: { screen_name: 'mick__romney'},
    dataType: 'jsonp',
    success: function(data) {
        console.dir(data); //Array[20]
        alert(typeof data); //Object
    }
});

Хотя console.dir(data) правильно идентифицирует переменную как массив, typeof data нелепо возвращает «Object».

Объяснение кроется в своеобразной спецификации JavaScript, где оператор typeof возвращает тип внутреннего свойства [[Class]] объекта. В случае массивов их свойству [[Class]] присвоено значение «Array», но при окружении объектами свойство [[Class]] меняется на «Object».

Для обеспечения точной проверки типов , разработчики могут использовать различные подходы:

  • data instanceof Array: проверяет, является ли переменная экземпляром типа Array.
  • Array.isArray(data): A метод, специально разработанный для определения того, является ли объект массивом.
  • Object.prototype.toString.call(data) == '[object Array]': надежный и широко распространенный метод обнаружения массива.
  • $.isArray(data): специфичная для jQuery функция, предназначенная для проверки массивов.

Понимая эту особенность и используя эти методы, разработчики могут эффективно обрабатывать массивы объектов в своем коде JavaScript.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3