jeudi 6 janvier 2011
Voici un autre piège à examiner tiré du quiz JavaScript.
var y = 1, x = y = typeof x;Que vaudra la variable x ?
console.log(x);
- 1
- "number"
- undefined
- "undefined"
Étape 1
var y = 1;Étape 2
var x = y;
console.log(x); // 1
var y = 1, x = y = x;Remarquez, typeof a été volontairement omis. L'assignation des valeurs allant de droite à gauche, on sait qu'on ne peut pas assigner x à y.
console.log(x); // undefined
console.log(y); // undefined
É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');
}