Ce qui est une façon concise et robuste d'écrire ces déclarations en JavaScript?
-
19-09-2019 - |
Question
J'ai un
Tout d'abord, cette déclaration est l'opérateur ternaire valide et efficace pour ce que je veux faire? Y a-t-il des pièges potentiels ici?
parent.settings.account ? var account = parent.settings.account : error();
En second lieu, est-il un moyen plus concis pour écrire cette déclaration?
Quelques-uns de ces variables sont facultatives, mais si elle est définie, ont une plage de valeurs acceptables. Ce qui est une façon robuste pour gérer cette situation? Quelque chose comme ça?
if (parent.settings.polling_interval && parent.settings.polling_interval >= 1000 && parent.settings.polling_interval <= 5000) {
var polling_interval = parent.settings.polling_interval;
} else {
var polling_interval = 3000; // default
}
En fait, si elle est indéfinie ou hors de portée, je veux utiliser une valeur par défaut.
Puis-je compter sur juste une déclaration conditionnelle comme:
if (parent.settings.polling_interval) { ... }
ou dois-je vérifier si elle est définie, comme ça?
if (typeof parent.settings.polling_interval !== 'undefined') { ... }
Y at-il quelque chose de plus robuste et / ou concis? Merci pour tout conseil.
La solution
Ceci est faux:
parent.settings.account ? var account = parent.settings.account : error();
Vous voulez dire:
var account = parent.settings.account ? parent.settings.account : error();
Ou même:
var account = parent.settings.account || error();
Autres conseils
var account = parent.settings.account;
if (!account)
error();
if ((p = parent.settings.polling_interval) && p >= 1000 && p <= 5000) {
...
}
var polling_interval = (p = parent.settings.polling_interval) && p >= 1000 && p <= 5000 ? p : 3000;
[1]
parent.settings.account ? ( var account = parent.settings.account ) : error();
Cela soulèvera une SyntaxError puisque vous ne pouvez pas définir une variable de cette manière.
Si error()
déclenche une exception / renvoie une erreur alors que vous pouvez faire:
if ( !parent.settings.account ) {
error()
}
// continue code
Comme indiqué précédemment, vous pouvez également assigner la variable à la propriété:
var account = parent.settings.account || error();
[2]
var pollingInterval = parent.settings.polling_interval &&
parent.settings.polling_interval >= 1000 &&
parent.settings.polling_interval <= 5000 ?
parent.settings.polling_interval : 3000;
[3] Vous pouvez utiliser if ( parent.foo )
et si foo
est indéfini aucune erreur stricte sera levée, mais il sera juste égal non défini, un parent assumant est toujours définie.
Si les paramètres sont définis et polling_interval ne sont pas, même cas. Si vous êtes sûr que la propriété est définie et les paramètres opposez existeront, vous pouvez utiliser
if ( parent.settings.polling_interval ) { }
Il serait utile indiquant ce error()
fait en réalité.