Ich habe mir vorhin einen Code in node.js angesehen und festgestellt, dass der Typ, der ihn geschrieben hat, die folgende Syntax zu bevorzugen scheint:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Über das, was ich für das prägnantere halte:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Ich habe mich gefragt, ob die zweite Form tatsächlich eine sozialverträglichere JavaScript-Syntax ist. Ich habe sie in der Natur öfter gesehen als der ternäre Operator für diesen Zweck.
Ich stelle fest, dass er im ersten Beispiel das Doppelte Gleiche (nicht das Dreifache Gleiche) verwendet, was bedeutet, dass "undefiniert" als null gezählt wird, was eine Auswirkung verringert, die ich mir vorstellen könnte. Ich habe jedoch an zahlreichen Stellen gelesen, dass == ein ziemlich schlechter Operator in JavaScript ist (JSLint ist sehr dagegen, IIRC).
javascript
syntax
Ed James
quelle
quelle
Antworten:
Da dieser Code bei jeder Übergabe von 0, "", false oder einem anderen falschen Wert als "Standardwert" ausgewertet wird.
Es wird Sie vielleicht nicht bei der Verwendung dieser bestimmten Funktion stören, aber es ist ein schlechtes Muster, das Sie vermeiden sollten, wenn Sie Dinge wie leere Zeichenfolgen oder 0 oder einen Booleschen Wert übergeben möchten.
quelle
var txt = 'Hello, ' + (user_name||'User') + '!';
, funktioniert dies, aber ohne Klammern erhalten Sieundefined
. jsfiddle.net/4mFAB/1Was Sie wirklich brauchen, ist ein Null-Koaleszenz-Operator. Aber da Javascript nicht wirklich eines hat, verwenden Programmierer normalerweise '||' dafür einzustehen.
Beides ist jedoch durchaus sinnvoll. Für diejenigen, die nicht verstehen, was ein Null-Koaleszenz-Operator ist, ist es wahrscheinlich wahrscheinlicher, dass der ternäre Operator verstanden wird.
quelle
[false-part, true-part]
mit einem separaten if-Operator, der in[..][bool(condition)]
kombiniert wird[false-part, true-part][bool(condition)]
. Wenn du faul sein willst, kannst du einfach den wahren und den falschen Teil lambda.