Saltar al contenido

¿Por qué typeof array con objetos devuelve “objeto” y no “array”?

Posterior a consultar expertos en la materia, programadores de diversas áreas y maestros hemos dado con la respuesta a la interrogande y la dejamos plasmada en este post.

Solución:

Uno de los comportamientos y especificaciones extraños en Javascript es el tipo de Array es Object.

Puede comprobar si la variable es una array en un par de maneras:

var isArr = data instanceof Array;
var isArr = Array.isArray(data);

Pero la forma más confiable es:

isArr = Object.prototype.toString.call(data) == '[object Array]';

Como etiquetó su pregunta con jQuery, puede usar jQuery isArray función:

var isArr = $.isArray(data);

Citando la especificación

15.4 Objetos de matriz

Los objetos de matriz dan un tratamiento especial a cierta clase de nombres de propiedad. Un nombre de propiedad P (en forma de valor de cadena) es un array índice si y solo si ToString(ToUint32(P)) es igual a P y ToUint32(P) no es igual a 2^32-1. Una propiedad cuyo nombre de propiedad es un array índice también se llama elemento. Cada objeto Array tiene una propiedad de longitud cuyo valor es siempre un número entero no negativo menor que 2^32. El valor de la propiedad de longitud es numéricamente mayor que el nombre de cada propiedad cuyo nombre es un array índice; cada vez que se crea o cambia una propiedad de un objeto Array, se ajustan otras propiedades según sea necesario para mantener esta constante. En concreto, cada vez que se añade una propiedad cuyo nombre es un array índice, la propiedad de longitud se cambia, si es necesario, para que sea uno más que el valor numérico de ese array índice; y cada vez que se cambia la propiedad de longitud, cada propiedad cuyo nombre es un array El índice cuyo valor no es menor que la nueva longitud se elimina automáticamente. Esta restricción se aplica solo a las propiedades propias de un objeto Array y no se ve afectada por la longitud o array propiedades del índice que pueden ser heredadas de sus prototipos.

Y aquí hay una tabla para typeof

ingrese la descripción de la imagen aquí


Para agregar algo de contexto, hay dos tipos de datos en JavaScript:

  1. Tipos de datos primitivos – Esto incluye nullindefinido, stringbooleano, número y objeto.
  2. Tipos de datos derivados/Objetos especiales – Estos incluyen funciones, matrices y expresiones regulares. Y sí, todos estos se derivan de “Objeto” en JavaScript.

Un objeto en JavaScript es similar en estructura al asociativo array/diccionario visto en la mayoría de los lenguajes orientados a objetos, es decir, tiene un conjunto de key-pares de valores.

Un array puede ser considerado como un objeto con las siguientes propiedades/keys:

  1. Longitud – Puede ser 0 o superior (no negativo).
  2. los array índices. Con esto quiero decir que “0”, “1”, “2”, etc. son todas propiedades de array objeto.

Espero que esto haya ayudado a arrojar más luz sobre por qué typeof Array devuelve un objeto. ¡Salud!

Pruebe este ejemplo y también comprenderá cuál es la diferencia entre la matriz asociativa y el objeto en JavaScript.

matriz asociativa

var a = new Array(1,2,3); 
a['key'] = 'experiment';
Array.isArray(a);

devoluciones true

Manten eso en mente a.length será indefinido, porque length es tratado como un keyDeberías usar Object.keys(a).length para obtener la longitud de una matriz asociativa.

Objeto

var a = 1:1, 2:2, 3:3,'key':'experiment'; 
Array.isArray(a)

devoluciones false

JSON devuelve un Objeto… podría devolver un Array Asociativo… pero no es así

Te invitamos a ayudar nuestro estudio añadiendo un comentario o dejando una puntuación te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *