jeudi 6 janvier 2011

Piège JavaScript no. 9 avec undefined

Voici un autre piège à examiner tiré du quiz JavaScript.
var y = 1, x = y = typeof x;
console.log(x);
Que vaudra la variable x ?
  • 1
  • "number"
  • undefined
  • "undefined"
Comme toute bonne question à choix de réponse, en donner deux qui se ressemblent permet de brouiller les pistes comme il faut. Décomposons le problème :

Étape 1
var y = 1;
var x = y;

console.log(x); // 1
Étape 2
var y = 1, x = y = x;
console.log(x); // undefined
console.log(y); // undefined
Remarquez, typeof a été volontairement omis. L'assignation des valeurs allant de droite à gauche, on sait qu'on ne peut pas assigner x à y.

Étape 3

On pourrait en conclure que typeof x (qui est indéfini) vaudrait aussi undefined. Mais est-ce une valeur indéfinie ou la chaîne de caractères "undefined" ? La trace de Firebug permet de nous éclairer :
var y = 1, x = y = typeof x;
console.log(x);
console.log(y);
console.log(typeof x);
console.log(typeof y);


La bonne réponse est la valeur undefined (celle en string). Les exemples suivants illustrent la bonne utilisation des deux variantes :
var a; // undefined
if(a == undefined){
console.log('La variable a est indéfinie');
}

var b; // undefined
if(typeof b == 'undefined'){
console.log('Le type retourné est la chaîne undefined');
}

Aucun commentaire:

Publier un commentaire