2016-12-13 3 views
1

J'utilise ce "!!" comparaison afin de comparer avec "indéfini". Cependant, y a-t-il un autre moyen de le faire?Comment éviter !! comparaison en JavaScript?

isWidgetTemplatesLoaded: function(widgetName) { 
      return !!templates[widgetName]; 
} 

Merci

+0

modèles typeof [nomwidget]! == "undefined" – Lain

+0

'' !! convertira la valeur de 'templates [nomwidget]' un booléen comme par 'booléens (modèles [nomwidget])'. Comment 'false == undefined' est-il meilleur que la comparaison directe comme dans' templates [widgetName] == undefined'? – RobG

Répondre

0

Vous pouvez utiliser l'opérateur typeof

typeof templates[widgetName]; 

que vous pouvez également utiliser comme cette

if (templates[widgetName] === undefined) { 
    // rest of code 
} 
else { 
    // rest of code 
} 
+0

Vous auriez pu modifier votre première réponse ... – RobG

+0

Merci. Cela fera-t-il exactement le même effet? –

1

Vous pouvez utiliser typeof pour vérifier undefined:

Typeof renvoie toujours une chaîne.

Il renvoie "indéfini" si la valeur de la variable n'est pas définie ou si la variable n'existe pas.

0

Pour vérifier undefined vous pouvez simplement utiliser les mêmes/différents sans conversion opérateurs:

if (x !== undefined) { ... } 
if (y === undefined) { ... } 

Notez cependant que cela n'a pas la même signification !! exacte. La double négation par exemple renvoie true même pour false, null, 0 ou "" en dépit du fait que ces valeurs ne sont pas undefined.

Par ailleurs en Javascript, vous devriez toujours essentiellement utilisation === et !== au lieu de == et !=, à moins que vous avez vraiment besoin de la conversion implicite fou que les opérateurs d'égalité/différents font (et personne n'a besoin que). Les bons éditeurs Javascript vous préviendront de l'utilisation de == ou != car ils ne sont que des cachettes.

Dans le spécifique de votre code question la logique !! semble mal sur le plan philosophique, car un modèle vide pourrait être "" et cette fonction serait dire que le modèle n'a pas été chargé en place, il a été chargé et se produit tout simplement être la chaîne vide.

+0

Peut-être que c'est parce que je viens du monde Java, mais la chose qui m'agace est de voir que * !! * –

+0

@stackman: en effet écrire du code comme 'x! == undefined' est beaucoup mieux (avec le seul ennui qui peut être quelqu'un s'attend à ce que vous traitiez 'null' de la même façon que' undefined'). Malheureusement Javascript a à la fois 'null' et' undefined' et il n'y a pas de façon triviale de vérifier juste pour les deux car aussi '0' et la chaîne vide sont 'falsy'. – 6502

0

Vous pouvez utiliser l'opérateur in, si vous le savez, si la propriété existe avec une valeur autre que undefined.

return widgetName in templates;