JavaScript : savoir si un objet est du type désiré
Rien de plus simple, me direz-vous : il existe l'opérateur instanceof qui se charge très bien du travail.
Hélas non ! InstanceOf ne marche pas pour :
- les objets primitifs (String, Boolean, Number, ...)
- les objets natifs (IHTMLElement, ....) --- mais ca c'est une autre histoire
Voici un petite code illustrateur :
var s1 = 'hello';
var s2 = "hello";
var s3 = new String ('hello');
typeof(s1) ==> "string"
typeof(s2) ==> "string"
typeof(s3) ==> "object"
//===> Impossible d'utiliser typeof
// pour savoir si un objet est un
// String ou pas...
s1 instanceof String ==> false
s2 instanceof String ==> false
s3 instanceof String ==> true
//===> Impossible d'utiliser instanceof
Il existe dès lors une première alternative : combiner typeof et instanceof
s1 est un String
===> (typeof(s1) == 'string' || s1 instanceof String)
Mais ce n'est pas très beau à voir... Ca fait un peu double emploi et qqun de pas habitué à JavaScript pourrait avoir tendance à virer un des deux tests qu'il estime inutile.
Alors, il existe une autre solution, un peu plus belle, je trouve :
s1 est un String ===> s1.constructor == String
Mieux encore, cela marche pour tous les objets, et pas que les natifs ! Plus besoin de instanceOf !
var o = new Object()
o.constructor == Object ==> true
var o = new MyClass()
o.constructor == MyClass ==> true
Alors, elle est pas belle la vie ;)
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
François REMY est un jeune développeur belge plein d'entrain qui traite surtout des technologies du web et de DotNet dans ses articles.