Publié par Florian Margaine le

Un petit truc très utile. En javascript, pour connaître le type d'une variable, il y a à priori la méthode typeof.

Voyons un peu si ça marche correctement :

typeof {} // "object" -> good!
typeof function() {} // "function" -> good!
typeof "" // "string" -> good!
typeof undefined // "undefined" -> good!

// Maintenant, on va un peu plus loin...
typeof null // "object" -> no good :(
typeof [] // "object" -> no good either :(

Le problème, c'est que les tableaux et même la valeur null sont des objets en javascript. Les fonctions aussi, mais elles sont un cas particulier car elles ont un constructeur particulier.

La solution à ce problème ? La voici :

Object.prototype.toString.apply([]) // "object Array"
Object.prototype.toString.apply(null) // "object Null"
({}).toString.apply(function() {}) // "object Function"

Les deux méthodes fonctionnent, mais c'est un poil plus rapide en utilisant Object.prototype.

Si vous vous demandez pourquoi je rajoute des parenthèses autour de l'objet vide, c'est pour la raison citée ici.

Si vous comptez l'utiliser plusieurs fois :

function realTypeof(obj) {
    return Object.prototype.toString.apply(obj)
}
realTypeof([]) // "object Array"

Oh, et ça marche jusqu'à IE6.

Juste un petit truc que je voulais partager :-)

blog comments powered by Disqus