Je jetais un coup d'œil à du code node.js plus tôt, et j'ai remarqué que le gars qui l'a écrit semblait favoriser la syntaxe suivante:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Sur ce que je considère comme le plus concis:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Je me demandais si le deuxième formulaire est en fait une syntaxe JavaScript plus socialement acceptable, je l'ai vu dans la nature plus de fois que l'opérateur ternaire à cet effet.
Je note que dans le premier exemple, il utilise les doubles égaux (pas les triples égaux), ce qui signifie qu'il comptera «non défini» comme nul, ce qui réduirait un impact auquel je pourrais penser. Cependant, j'ai lu à de nombreux endroits que == est un opérateur plutôt mauvais en JavaScript (JSLint est très contre, IIRC).
javascript
syntax
Ed James
la source
la source
Réponses:
Parce que ce code est évalué à "Valeur par défaut" à chaque fois que vous passez 0, "", false ou une autre valeur falsifiée.
Cela peut ne pas vous mordre sur la façon dont vous utilisez cette fonction particulière, mais c'est un mauvais schéma à éviter lorsque vous vous souciez de passer des choses comme des chaînes vides ou 0 ou un booléen.
la source
var txt = 'Hello, ' + (user_name||'User') + '!';
fonctionnera, mais sans parenthèses - vous obtiendrezundefined
. jsfiddle.net/4mFAB/1Ce dont vous avez vraiment besoin, c'est d'un opérateur de fusion nul. Mais vu que javascript n'en a pas vraiment, les programmeurs utilisent généralement '||' pour le remplacer.
Cependant, les deux sont parfaitement raisonnables. Pour ceux qui ne comprennent pas ce qu'est un opérateur de fusion nul, l'opérateur ternaire est probablement plus susceptible d'être compris.
la source
[false-part, true-part]
avec un opérateur if séparé[..][bool(condition)]
combiné[false-part, true-part][bool(condition)]
. Si vous voulez un comportement paresseux, vous pouvez simplement lambda les parties vraie et fausse.