Eu estava dando uma olhada em algum código node.js. anteriormente e notei que o cara que o escreveu parecia favorecer a seguinte sintaxe:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Sobre o que considero mais conciso:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Fiquei me perguntando se o segundo formulário é realmente mais sintaxe JavaScript socialmente aceitável, já o vi na natureza mais vezes do que o operador ternário para esse fim.
Percebo que, no primeiro exemplo, ele está usando o duplo igual (não o triplo igual), o que significa que ele contará "indefinido" como nulo, o que reduziria um impacto que eu poderia pensar. No entanto, eu li em vários lugares que == é um operador bastante ruim em JavaScript (o JSLint é muito contra, IIRC).
javascript
syntax
Ed James
fonte
fonte
Respostas:
Como esse código seria avaliado como 'Valor padrão' sempre que você passasse 0, "", false ou algum outro valor falso.
Talvez você não se preocupe com o modo como você usa essa função específica, mas é um padrão ruim a ser evitado quando você se importa em passar coisas como cadeias vazias ou 0 ou um booleano.
fonte
var txt = 'Hello, ' + (user_name||'User') + '!';
funcionará, mas sem parênteses - você receberáundefined
. jsfiddle.net/4mFAB/1O que você realmente precisa é de um operador de coalescência nula. Mas, visto que o javascript realmente não tem um, os programadores geralmente usam '||' para substituí-lo.
No entanto, ambos são perfeitamente razoáveis. Para aqueles que não entendem o que é um operador de coalescência nula, provavelmente é mais provável que o operador ternário seja entendido.
fonte
[false-part, true-part]
com um operador separado se[..][bool(condition)]
combinado[false-part, true-part][bool(condition)]
. Se você quer um comportamento preguiçoso, pode simplesmente criar a parte verdadeira e falsa.