Operatore ternario Javascript vs. ||

16

Stavo dando un'occhiata a qualche codice node.js prima e ho notato che il tizio che l'ha scritto sembrava preferire la seguente sintassi:

var fn = function (param) {
    var paramWithDefault = null == param ? 'Default Value' : param;
}

su ciò che considero più conciso:

var fn = function (param) {
    var paramWithDefault = param || 'Default Value';
}

Mi stavo chiedendo se la seconda forma è in realtà una sintassi JavaScript socialmente accettabile, l'ho vista in giro più volte rispetto all'operatore ternario per questo scopo.

Ho notato che nel primo esempio usa i doppi uguali (non i triple equals), il che significa che conterà "undefined" come null, il che ridurrebbe un impatto a cui potrei pensare. Tuttavia, ho letto in numerose parti che == è un operatore piuttosto malvagio in JavaScript (JSLint è molto contro di esso, IIRC).

    
posta Ed James 08.06.2011 - 22:24
fonte

2 risposte

16

Perché questo codice dovrebbe valutare "Valore predefinito" ogni volta che si passa a 0, "", falso o qualche altro valore di falsy.

function fn(param) {
  var paramWithDefault = param || 'Default Value';
  return paramWithDefault;
}

Potresti non morderti su come usi questa particolare funzione, ma è un cattivo schema da evitare quando ti interessa passare cose come stringhe vuote o 0 o un booleano.

    
risposta data 08.06.2011 - 22:51
fonte
7

Ciò di cui hai veramente bisogno è un operatore di coalesce nullo. Ma visto che javascript non ne ha davvero uno, i programmatori tipicamente usa" || " per sostituirlo.

Tuttavia, entrambi sono perfettamente ragionevoli. Per coloro che non capiscono cosa sia un operatore di coalesce nullo, è probabile che l'operatore ternario sia più comprensibile.

    
risposta data 08.06.2011 - 22:35
fonte

Leggi altre domande sui tag