Estaba mirando algún código de node.js antes, y noté que el tipo que lo escribió parecía favorecer la siguiente sintaxis:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Sobre lo que considero más conciso:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Me preguntaba si la segunda forma es en realidad una sintaxis JavaScript más socialmente aceptable, la he visto en la naturaleza más veces que el operador ternario para este propósito.
Observo que en el primer ejemplo está usando los dobles iguales (no los triples iguales), lo que significa que contará "indefinido" como nulo, lo que reduciría un impacto en el que podría pensar. Sin embargo, he leído en numerosos lugares que == es un operador bastante malvado en JavaScript (JSLint está muy en contra, IIRC).
javascript
syntax
Ed James
fuente
fuente
Respuestas:
Debido a que este código se evaluaría a 'Valor predeterminado' cada vez que pasara 0, "", falso o algún otro valor falso.
Puede que no te muerda cómo usas esta función en particular, pero es un mal patrón para evitar cuando te importa pasar cosas como cadenas vacías o 0 o un booleano.
fuente
var txt = 'Hello, ' + (user_name||'User') + '!';
funcionará, pero sin paréntesis, obtendráundefined
. jsfiddle.net/4mFAB/1Lo que realmente necesita es un operador de fusión nula. Pero al ver que javascript realmente no tiene uno, los programadores suelen usar '||' para sustituirlo.
Sin embargo, ambos son perfectamente razonables. Para aquellos que no entienden qué es un operador de fusión nula, es probable que el operador ternario sea más comprensible.
fuente
[false-part, true-part]
con un operador si separado[..][bool(condition)]
combinado en[false-part, true-part][bool(condition)]
. Si desea un comportamiento perezoso, simplemente puede lambda la parte verdadera y falsa.