w3schools isstring array javascript jquery arrays object typeof

javascript - isstring - ¿Por qué typeof array con objetos devuelve "Object" y no "Array"?



typeof jquery (4)

Posible duplicado:
JavaScript: compruebe si el objeto es una matriz

¿Por qué una matriz de objetos se considera un objeto y no una matriz? Por ejemplo:

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

Fiddle


Citando la especificación

15.4 Array Objects

Los objetos de matriz dan un tratamiento especial a cierta clase de nombres de propiedad. Un nombre de propiedad P (en forma de un valor String) es un índice de matriz 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 índice de matriz también se denomina elemento. Cada objeto Array tiene una propiedad de longitud cuyo valor siempre es un 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 índice de matriz; cada vez que se crea o cambia una propiedad de un objeto Array, se ajustan otras propiedades según sea necesario para mantener esta invariante. Específicamente, cada vez que se agrega una propiedad cuyo nombre es un índice de matriz, la propiedad de longitud se cambia, si es necesario, para ser una más que el valor numérico de ese índice de matriz; y siempre que se cambie la propiedad de longitud, cada propiedad cuyo nombre sea un índice de matriz cuyo valor no sea inferior a la nueva longitud se eliminará automáticamente. Esta restricción se aplica solo a las propiedades propias de un objeto Array y no se ve afectada por las propiedades de longitud o índice de matriz que pueden heredarse de sus prototipos.

Y aquí hay una tabla para typeof

Para agregar algunos antecedentes, hay dos tipos de datos en JavaScript:

  1. Tipos de datos primitivos : incluye null, undefined, string, boolean, number y object.
  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 conjunto asociativo / diccionario que se ve en la mayoría de los lenguajes orientados a objetos, es decir, tiene un conjunto de pares clave-valor.

Una matriz se puede considerar como un objeto con las siguientes propiedades / claves:

  1. Longitud : puede ser 0 o superior (no negativo).
  2. Los índices de la matriz . Con esto, quiero decir "0", "1", "2", etc. son todas las propiedades del objeto de matriz.

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


No hay una matriz JS simple en su código. Los data son un objeto JS nativo. Tenga en cuenta los diferentes significados de los diferentes tipos de corchetes:

var someArray = []; var someObject = {};


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);

devuelve true

Tenga en cuenta que a.length no estará definido, porque la length se trata como una clave, debe 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)

devuelve false

JSON devuelve un objeto ... podría devolver una matriz asociativa ... pero no es así


Uno de los comportamientos y especificaciones más extrañas en Javascript es el tipo de Array is Object .

Puede verificar si la variable es una matriz de dos 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 la función jQuery isArray :

var isArr = $.isArray(data);