Подтвердить что ты не робот

Null-coalescing в Javascript?

В С# вы можете сделать следующее:

string y = null;
string x = y ?? "sup stallion"; //x = "sup stallion" since y is null.

Где Оператор ?? является оператором с нулевой связностью.

И в Javascript я видел нечто подобное:

var headers;
var myHeader = headers || {'Content-type':'text/plain'}; //myHeaders = {'Content...

Я также видел: (2-й фрагмент кода на странице)

var headers;
var myHeader = headers | {'Content-type':'text/plain'};

Есть ли разница между этими двумя? Что этот шаблон называется... параметром по умолчанию?

4b9b3361

Ответ 1

|| является логическим или. Он возвращает первый правный операнд * (последнее оцениваемое значение). Так

var myHeader = headers || {'Content-type':'text/plain'};

Возвращает "заголовки", если он правдивый (и если он равен null или undefined, это значение вложено в "false" ). Если он ложный, он возвращает второй операнд. Я не верю, что это имеет очень специфическое имя в javascript, просто что-то общее, как "значение аргумента по умолчанию".

| является побитовым или. Это математическая операция и делает что-то совершенно другое. Этот оператор здесь даже не имеет смысла (и он, как правило, просто создает 0). Где бы вы ни увидели это, это была опечатка, и они хотели использовать логические или.

Итак, идите с этим первым методом (a = b || c).

* "Логический или" также известен как "логическая дизъюнкция" или "инклюзивная дизъюнкция". Javascript, как и все языки программирования, оценивает логические выражения, используя оценку короткого замыкания. С логическим выражением или выражениями он оценивает каждый операнд правдоподобия и останавливается на первом истинном (и возвращает это значение). Если нет правных операндов, им все равно придется пройти через все, поэтому он возвращает последний операнд, все еще последний, который он оценил. Логически и (&) аналогичным образом закорочены, останавливаясь на первом ложном операнде.

Ответ 2

Я не знаком со вторым шаблоном. Мне известны два шаблона:

1) Ваш первый шаблон является основным логическим или оператором. Если первое значение ложно, тогда назначается второе значение.

2) Второй шаблон называется тройным назначением, которое по логике аналогично базовому условию if, но синтаксис немного отличается.

var test = (typeof myTest === "string") ? firstValue : secondValue;

В этом шаблоне знак вопроса отделяет условие от значений, а двоеточие отделяет значения. Третичные назначения могут быть вложены так, что одно из значений содержит другое третичное.