Wcześniej przyglądałem się kodowi node.js i zauważyłem, że facet, który go napisał, wydaje się faworyzować następującą składnię:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Ponad to, co uważam za bardziej zwięzłe:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Zastanawiałem się, czy druga forma jest w rzeczywistości bardziej akceptowalną społecznie składnią JavaScript, widziałem ją na wolności więcej razy niż operator trójskładnikowy w tym celu.
Zauważam, że w pierwszym przykładzie używa podwójnej równości (nie potrójnej równości), co oznacza, że będzie ona traktowana jako „niezdefiniowana” jako zero, co zmniejszyłoby jeden wpływ, o którym mogłem pomyśleć. Jednak czytałem w wielu miejscach, że == jest raczej złym operatorem w JavaScript (JSLint jest temu bardzo przeciwny, IIRC).
javascript
syntax
Ed James
źródło
źródło
Odpowiedzi:
Ponieważ ten kod będzie przyjmował wartość „Wartość domyślna” za każdym razem, gdy podasz 0, „”, fałsz lub inną wartość fałszowania.
Być może nie gryzie Cię w sposobie korzystania z tej konkretnej funkcji, ale jest to zły wzorzec, którego należy unikać, gdy zależy ci na przekazywaniu rzeczy takich jak puste ciągi znaków lub wartość logiczna.
źródło
var txt = 'Hello, ' + (user_name||'User') + '!';
, zadziała, ale bez nawiasów - dostanieszundefined
. jsfiddle.net/4mFAB/1To, czego naprawdę potrzebujesz, to zerowy operator koalescencyjny. Ale widząc, że javascript tak naprawdę go nie ma, programiści zwykle używają „||” stać na to.
Oba są jednak całkowicie uzasadnione. Dla tych, którzy nie rozumieją, czym jest operator koalescencji zerowej, operator trójskładnikowy jest prawdopodobnie bardziej zrozumiały.
źródło
[false-part, true-part]
z osobnym operatorem if w[..][bool(condition)]
połączeniu[false-part, true-part][bool(condition)]
. Jeśli chcesz leniwego zachowania, możesz po prostu wyrazić prawdę i fałsz.