2015-02-06 1 views
0

Я хочу, чтобы иметь возможность сделать следующее:Как установить однострочный сеттер для переменной в javascript?

Предполагая, что у меня есть 3 переменные:

  • var a1;
  • var a2;
  • var x;

Я хочу, чтобы иметь возможность установить "x":

  • равным a1, если это не null
  • равным a2 если a1 не null
  • равным a1 если a2 как a1 и a2 определены
  • равным нулю если a1 и a2 оба null

есть одна строка JavaScript я могу это сделать с?

В настоящее время я:

var x; 

if (a2) { 
x = a2; 
} 

if (a1) { 
x = a1; 
} 
+0

'var x; x = a1? a1: (a2? a2: null) ' – levi

+0

Конечно, вы можете сделать это в одной строке, но почему одна строка?напишите его так, чтобы он был легко читаемым, а затем используйте minifier. –

ответ

4

Предполагая, что вы заботитесь только о том, является ли значение falsy вместо идентичны null используйте ||:

var x = a1 || a2 || null; 

"и" и "или" операторов короткое замыкание на любом языке C-влияния. В сочетании с понятием Javascript о правдивости это мощная функция. Используй это.

+1

Это может работать для большинства сценариев, но не будет работать, если 'a1' или' a2' являются ложными (например, 'false' или' '' '). – cmbuckley

+0

a1 или a2 являются нулями или объектами, поэтому нет необходимости рассматривать false или '' – Rolando

+0

Я бы предложил использовать && из требования OP ... –

0

использование ? оператор

var x; x = a1 ? a1 : (a2 ? a2: null) 
2

Вы можете использовать ternary expression. Это позволит вам передать условие вместо дефолта undefined/null чеков. Это условие короткого замыкания.

Так же, как C# и Java, то выражение будет вычисляться только , если, и только если, выражение является соответствие один для условий данных; другое выражение не будет оцениваться. [2]

var x = a1 != null ? a1 : a2 != null ? a2 : null; 

Хотя использование ? and : выглядит как оператор Элвиса (?:), в JavaScript используется || (OR logical operator) для выполнения null coalescing значений по умолчанию.

var x = a1 || a2 || null; 
Смежные вопросы