?
e ||
verificano condizioni completamente diverse (ma sovrapposte).
L'operatore ||
funziona esattamente allo stesso modo come avviene in JavaScript quindi le cose come 0
e ''
sono Falsey quanto ||
è interessato; ||
controlla la sincerità in senso JavaScript.
L'operatore ?
viene convertito nel == null
JavaScript in modo a ? b
è solo b
quando a
è null
o undefined
; ?
controlla la definizione nel senso di CoffeeScript.
considerare questi:
for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ||= 'pancakes'
console.log("#{v} ||= 'pancakes':", a)
for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ?= 'pancakes'
console.log("#{v} ?= 'pancakes':", a)
Il primo ciclo vi darà cinque frittelle e una 6
, il secondo ciclo vi darà una false
, 0
, ''
, due frittelle e un 6
.
Demo: http://jsfiddle.net/ambiguous/PdLDe/1/
Quindi, se volete solo il comportamento in stile JavaScript (vale a dire 0
, false
, e ''
devono essere ignorati) allora probabilmente si desidera ||=
. Se si desidera saltare oltre null
e undefined
allora si desidera ?=
.
fonte
2013-03-27 00:33:39
Penso che tu intenda "# {v} .." non "# {a} ..", perché stampare due volte? –
@NickSotiros: Penso che tu abbia ragione, le stringhe all'interno delle chiamate a 'console.log' dovrebbero (e ora lo fanno) usare' # {v} 'mentre il secondo argomento dovrebbe essere' a'. Grazie per il testa a testa. –