Ранее я просматривал какой-то код node.js и заметил, что тот, кто его написал, предпочитает следующий синтаксис:
var fn = function (param) {
var paramWithDefault = null == param ? 'Default Value' : param;
}
Над тем, что я считаю более кратким:
var fn = function (param) {
var paramWithDefault = param || 'Default Value';
}
Мне было интересно, если вторая форма на самом деле является более социально приемлемым синтаксисом JavaScript, я видел это в дикой природе больше раз, чем троичный оператор для этой цели.
Я отмечаю, что в первом примере он использует двойные равные (а не тройные равные), что означает, что он будет считать «неопределенный» как нулевой, что уменьшит одно влияние, о котором я мог подумать. Однако во многих местах я читал, что == является довольно злым оператором в JavaScript (JSLint очень против этого, IIRC).
javascript
syntax
Эд Джеймс
источник
источник
Ответы:
Потому что этот код будет иметь значение «Значение по умолчанию» каждый раз, когда вы передаете 0, «», false или какое-либо другое ложное значение.
Это может не повлиять на то, как вы используете эту конкретную функцию, но это плохой шаблон, который следует избегать, когда вы заботитесь о передаче таких вещей, как пустые строки или 0 или логическое значение.
источник
var txt = 'Hello, ' + (user_name||'User') + '!';
будет работать конкатенация строк , но без скобок - вы получитеundefined
. jsfiddle.net/4mFAB/1Что вам действительно нужно, так это нулевой оператор объединения. Но, увидев, что в javascript его нет, программисты обычно используют '||' стоять за это.
Тем не менее, оба вполне разумны. Для тех, кто не понимает, что такое оператор слияния, тернарный оператор, вероятно, будет более понятен.
источник
[false-part, true-part]
с отдельным оператором if,[..][bool(condition)]
объединенным в[false-part, true-part][bool(condition)]
. Если вы хотите ленивого поведения, вы можете просто лямбда-истину и ложь.