"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que `typeof` retorna "Object" para arrays contendo objetos em JavaScript?

Por que `typeof` retorna "Object" para arrays contendo objetos em JavaScript?

Publicado em 2024-11-08
Navegar:641

Why Does `typeof` Return \

Compreendendo a contradição: por que typeof Array com objetos retorna "Object"

Os desenvolvedores podem encontrar um fenômeno surpreendente: ao invocar typeof em um array contendo objetos, ele retorna inexplicavelmente "objeto" em vez de "matriz". Este artigo investiga esse comportamento aparentemente contraditório.

Examinando um exemplo, vamos ilustrar o problema:

$.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
    }
});

Embora console.dir(data) identifique corretamente a variável como um array, typeof data retorna incongruentemente "Object."

A explicação está na especificação peculiar do JavaScript, onde o operador typeof retorna o tipo da propriedade interna [[Class]] do objeto. No caso de arrays, sua propriedade [[Class]] é definida como "Array", mas quando cercada por objetos, a propriedade [[Class]] muda para "Object".

Para garantir uma verificação de tipo precisa , os desenvolvedores podem empregar várias abordagens:

  • data instanceof Array: verifica se a variável é uma instância do tipo Array.
  • Array.isArray(data): um método projetado especificamente para determinar se um objeto for um array.
  • Object.prototype.toString.call(data) == '[object Array]': Um método confiável e amplamente aceito para detecção de array.
  • $. isArray(data): Uma função específica do jQuery projetada para verificar matrizes.

Ao compreender essa peculiaridade e utilizar essas técnicas, os desenvolvedores podem lidar com matrizes de objetos de maneira eficaz em seu JavaScript código.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3