RSS Feed

Es un Array o no?

1

junio 21, 2012 by - @pjnovas

Te pasó, no?, tenés que comprobar si el parámetro que recibiste en tu maravillosa funcion es un Array, o no. Primero probamos, tardamos menos que abrir google (o no ..):

var unArray = [];
if (typeof unArray === 'Array') //puede que tenga sentido, pero no
if (unArray.constructor === Array) //anda?, no parece piola 

Ahora si, abrimos google y nos tira mil opciones mas

if (unArray instanceof Array) //esta pinta bien
toString.call(unArray) === "[object Array]"; //bueh..

No estaría bueno poder hacer lo siguiente y fue?:

if (Array.isArray(unArray)) {
}

Está bueno y se puede, no entiendo porque tantas formas de comprobar lo mismo si ya podemos hacerlo tan simple.

Soporte: Chrome 5+, Firefox 4+, Safari 5+, Opera 10.5+, IE 9+

Si, ya se, me vas a decir que en IE 6, 7 y 8 no funca, bueno para todo browser que no se la banque, metemos el script:

if(!Array.isArray) {
  Array.isArray = function (vArg) {
    return Object.prototype.toString.call(vArg) === "[object Array]";
  };
}

o bien, algunas de todas las librerias que “levantan” el soporte del browser.

Como conclusión, dejemos de tirar condiciones extrañas de comprobacion de Arrays, ya tenemos a disposición un método que queda muy coqueto :P

Mas documentación en MDN: isArray()


  • Mauricio

    AngularJs el superheroic framework de google lo hace de la siguiente manera:

    http://docs.angularjs.org/api/angular.isArray

    /**
    * @ngdoc function
    * @name angular.isArray
    * @function
    *
    * @description
    * Determines if a reference is an `Array`.
    *
    * @param {*} value Reference to check.
    * @returns {boolean} True if `value` is an `Array`.
    */
    function isArray(value) {
    return toString.apply(value) == ‘[object Array]‘;
    }

    Saludos