typage javascript

Publié le par jö

Une petite entrée qui n'a de rapport avec les maths que par la logique employée par javascript pour évaluer ses types (logique un peu plus que binaire par l'emploi de 'undefined').

Si une variable u n'est pas déclarée, l'instruction Print(typeof(u)) imprime 'undefined' et l'instruction Print(u) génère une erreur de type ReferenceError.

Si on dispose d'une série d'objets connus :

function constrClass(att){
  this.attribut = att;
  return this;}

constrClass.prototype = new Object;
constrClass.prototype.constructor = constrClass;

constrClass.prototype.myMethod = function(){
   return this.attribut;};

var myObject = new constrClass(1);

,ces différentes déclarations produisent les impressions suivantes :

  Print(typeof(u)) Print(u)
var u; undefined undefined
var u=constrClass; function
function constrClass(att)
this.attribut=att;
return this;}
var u=constrClass(); object [object global]
var u=myObject.myMethod; function
function ()
return this.attribut;}
var u=myObject.myMethod(); number 1
var u=myObject; object [object Object]


Ceci étant, la logique de javascript présente certains résultats à connaître :
var u var v Print(expression logique) -> impression Commentaire
; ; Print(u==v) -> true 'undefined' est suffisamment défini pour pouvoir produire des expressions logiques
; ; Print(u||v) -> undefined 'undefined' est suffisamment défini pour être manipulé comme une expression binaire
=true; ; Print(u||v) -> true  
; =true; Print(u||v) -> true l'effet d''undefined' est nul dans un OU face à 'true'
=false; ; Print(u||v) -> undefined l'effet d''undefined' semble prépondérant dans un OU face à un 'false'...
; =false; Print(u||v) -> false ...mais, ici, l'ordre d'évaluation intervient !
; ; Print(u&&v) -> undefined  
=true; ; Print(u&&v) -> undefined  
; =true; Print(u&&v) -> undefined l'effet d''undefined' est prépondérant dans un ET face à 'true'
=false; ; Print(u&&v) -> false l'effet d''undefined' semble nul dans un ET face à un 'false'...
; =false; Print(u&&v) -> undefined ...mais, ici, l'ordre d'évaluation intervient !


Pour que la logique d'un script coïncide avec le bon sens (un OU n'est false que quand aucune de ses expressions n'est true; un ET est false dès qu'une de ses expressions est false), il faut, lors de la conception de l'expression logique, s'imposer de placer l'expression indéfinie en dernier.

Commenter cet article