var a = '';
var b;
app.isDefined = function(value){
return value !== undefined;
}
console.log( app.isDefined(a) ? 'defined' : 'undefined' );
console.log( app.isDefined(b) ? 'defined' : 'undefined' );
Logiquement, On s'attend à ce que la variable 'a' soit définie alors que 'b' ne le soit pas Mais qu'arriverait-t-il si on définissait volontairement une variable undefined dans ce script ou involontairement lors de l'inclusion d'une librairie externe ? Le concept de closure viendrait introduire une vulnérabilité :
var app = new Object();
var a = '';
var b;
var undefined = 4; // oups...
app.isDefined = function(value){
return value !== undefined;
}
console.log( app.isDefined(a) ? 'defined' : 'undefined' );
console.log( app.isDefined(b) ? 'defined' : 'undefined' );
Dans ce cas-ci, les deux appels retourneraient 'defined'.
L'idéal serait de ne jamais se fier à la propriété undefined, à moins de la redéclarer à l'intérieur de la fonction qui compte l'utilise.Ainsi, on évitera les mauvaises surprises reliées à ce genre de pratique.
var undefined = 4; // ok
app.isDefined = function(value){
// sans danger pour le undefined dans la portée globale
var undefined;
return value !== undefined;
}

Aucun commentaire:
Enregistrer un commentaire