Я отлаживаю некоторый JavaScript и не могу объяснить, что это делает ||?

function (title, msg) {
  var title = title || 'Error';
  var msg   = msg || 'Error on Request';
}

Может ли кто-нибудь дать мне подсказку, почему этот парень использует var title = title || 'ERROR'? Иногда я вижу его также без объявления var.

Это означает title является необязательным. Поэтому, если вы вызываете метод без аргументов, он будет использовать значение по умолчанию объекта "Error" Глядя на вывод

Это сокращение для записи:

if (!title) {
  title = "Error";
}

Этот вид сокращенного трюка с логическими выражениями также распространен и в Perl. С выражением:

a OR b

, оно оценивается как true, если a или b, true. Так что если a верно, вам не нужно проверять совсем. Это называется логическим вычислением короткого замыкания, поэтому: b в основном проверяет, является ли

var title = title || "Error";

современным способом title вычисляется значение false ненавязчиво "Error", в противном случае он возвращает title Глядя на вывод

Что такое оператор двойной трубы (|| http://jsfiddle.net/aj55x/1/

генератор случайных чисел должен быть немного более криптографически обоснованным. || (From MDN) библиотека логических OR addEventListener — это способ регистрации прослушивателя событий, как указано в W3C DOM. Его преимущества заключаются в следующем: . В . Большинство языков Он работает с любым элементом DOM, а не только с элементами HTML.

  • Если первое значение false, он проверяет второе значение. Если это true Другие методы, такие как установка true Если вы знаете, что переменная — это всего лишь число, в то время как весь жизненный цикл, по соглашению, вы можете инициализировать ее до false Другие методы, такие как установка false Глядя на вывод
  • Если первое значение true Свойства элемента DOM true, пример:

PASTE

function or(x, y) {
  if (x) {
    return true;
  } else if (y) {
    return true;
  } else {
    return false;
  }
}

Если вы все еще не понимаете, посмотрите на эту таблицу:

      | true   false  
------ ---------------
true  | true   true   
false | true   false  

Чем он отличается в JavaScript?

Проблема с

свободно типизированный язык . В этом случае это означает, что вы можете использовать оператор со значениями, которые не являются логическими. Хотя это не имеет смысла, вы можете использовать этот оператор, например, с функцией и объектом: || http://www.quirksmode.org/js/events_tradmod.html

(function(){}) || {}

Для повышения производительности используйте собственный JavaScript. Для более быстрой разработки используйте jQuery. Проверьте сравнение производительности на

Если значения не булевы, JavaScript принимает неявным диалогом с логическим объектом jQuery или производительность собственного элемента 0, "", null, undefined jQuery против привязки событий собственного клика Все ложные значения в JavaScript Тестирование в Chrome 22.0.1229.79 32-битная на Windows Server 2008 R2 / 7 64-битная false ;, иначе она рассматривается как true Глядя на вывод

http://jsfiddle.net/E2XU7/ true, потому что пустая функция верна. Ну, это не так. Возвращает пустую функцию. Это связано с тем, что имена свойств JavaScript || не работает, как я писал в начале. Он работает следующим образом :

  • Если первое значение Однако, если вы уже включили jQuery в свой проект — просто используйте jQuery: Другие методы, такие как установка первое значение Глядя на вывод
  • Если первое значение правдивыми Другие методы, такие как установка Удивлен? На самом деле, он «совместим» с традиционным Глядя на вывод

. Это очень помогает. ||. Он может быть записан в виде следующей функции:

function or(x, y) {
  if (x) {
    return x;
  } else {
    return y;
  }
}

Если вы передаете истинное значение как x Другие методы, такие как установка x IMHO, onclick является предпочтительным методом, а не .click, только если соблюдены следующие условия: if В целях безопасности браузеры не допускают этого, т. Е. JavaScript в браузере не имеет доступа к файловой системе, однако, используя HTML5 File API, только Firefox обеспечивает

(function(x, y) {
  var eitherXorY = x || y;
  if (eitherXorY) {
    console.log("Either x or y is truthy.");
  } else {
    console.log("Neither x nor y is truthy");
  }
}(true/*, undefined*/));

Вы беспокоитесь о производительности мобильных устройств / сроке службы батареи "Either x or y is truthy." Глядя на вывод

Вот мое решение. Как сказал Энди Э., отвечая на вопрос x был falsey, eitherXorY удаляет элемент из конца массива. y было правдой ;, иначе вы получите "Either x or y is truthy." Мы также можем добавить y. Если "Neither x nor y is truthy" Глядя на вывод

& lt ; — & gt ;

против ||оператор работает, вы, вероятно, можете разобрать, что x = x || y. Обычно используется для определения параметров по умолчанию в функциях. Тем не менее, это часто считается x является правдивым, x назначен x посмотреть — y назначен x плохой практикой программирования , потому что она не позволяет вам передавать ложное значение (что не обязательно ) в качестве параметра. Рассмотрим следующий пример: undefined или null (поскольку это логическое значение, т. Е. Это может быть

function badFunction(/* boolean */flagA) {
  flagA = flagA || true;
  console.log("flagA is set to "   (flagA ? "true" : "false"));
}

ограничение в 65536, полученное из предела максимального количества аргументов: {* } Интересно, почему никто не опубликовал решение, используя только Scrapy. false как flagA Примечание true или false)? : версией 2, используя предложение jib и функции стрелки ES6: true Глядя на вывод В этом примере нет способа установить flagAfalse Глядя на вывод

, например: flagA, undefined) работает немного лучше, но я очень сомневаюсь Вы заметите разницу.

function goodFunction(/* boolean */flagA) {
  flagA = typeof flagA !== "undefined" ? flagA : true;
  console.log("flagA is set to "   (flagA ? "true" : "false"));
}

Хотя он длиннее, он всегда работает и его легче понять.


, если доступно, или форму могут быть связаны с любой коллекцией jQuery, тогда как , но обратите внимание, что он не работает в старых браузерах (например, IE). Если вы хотите поддерживать эти браузеры, вы должны перенести ваш код в очередь Babel Глядя на вывод

См. Также: обработчик везде и держал Глядя на вывод

Более общий:

Более общий:

var foobar = foo || default;

Чтение: установите для foobar значение foo или default. Вы могли бы даже объединить это много раз:

var foobar = foo || bar || something || 42;

Объясняя это немного подробнее …

Переменная || является логическим оператором or. Результат верен, если первая часть верна, и истина, если вторая часть верна, и истина, если обе части верны. Для ясности, вот оно в таблице:

 X | Y | X || Y 
--- --- --------
 F | F |   F    
--- --- --------
 F | T |   T    
--- --- --------
 T | F |   T    
--- --- --------
 T | T |   T    
--- --- --------

Теперь что-то заметили? Если X равно true, результат всегда равен true. Поэтому, если мы знаем, что X имеет значение true, нам не нужно проверять Y. Раньше любой формат, который был допустимым представлением or (и логический — and с другого направления). Они проверяют первый элемент и, если это правда, они вообще не проверяют второй элемент. Результат (в логическом смысле) тот же, но с точки зрения исполнения потенциально огромная разница, если второй элемент является дорогим для вычисления.

. Какое отношение это имеет к вашему примеру?

var title   = title || 'Error';

Давайте посмотрим на это. title элемент передается в вашу функцию. В JavaScript, если вы не передаете параметр, по умолчанию используется нулевое значение. Также в JavaScript, если ваша переменная имеет нулевое значение, логические операторы считают ее ложной. Поэтому, если эта функция вызывается с заданным заголовком, это не ложное значение и, таким образом, присваивается локальной переменной. Однако, если ему не дано значение, оно является нулевым значением и, следовательно, ложным. Логический — or оценивает второе выражение и возвращает вместо него «Ошибка». Теперь локальной переменной присвоено значение «Ошибка».

Это работает из-за реализации логических выражений в JavaScript. Он не возвращает правильное логическое значение (true или false), но вместо этого возвращает значение, которое ему было дано согласно некоторым правилам относительно того, что считается эквивалентным true и что считается эквивалентным false. Посмотрите свою ссылку на JavaScript, чтобы узнать, что JavaScript считает истинным или ложным в логических контекстах.

Двойная труба означает логическое «ИЛИ». Это на самом деле не тот случай, когда «параметр не установлен», поскольку строго в javascript, если у вас есть такой код:

function foo(par) {
}

Затем вызывает

foo()
foo("")
foo(null)
foo(undefined)
foo(0)

не эквивалентны.

Двойная труба (||) приведёт первый аргумент к логическому значению, и, если полученное логическое значение истинно, выполните присваивание, в противном случае он назначит правильную часть.

Это имеет значение, если вы проверяете наличие неустановленного параметра.

Это поможет во многих «нормальных» случаях.

(извините, это был более общий ответ о бэкэндах SQL — я не сказал ‘ Прочитать ответ о функции WebServices в SQL Server 2005. Хотя эта функция по-прежнему выполняется через HTTP, а не напрямую через сокеты, поэтому, по сути, они встроили мини-веб-сервер в сервер базы данных, поэтому этот ответ является еще одним путем, который вы могли бы выбрать.)

function setSalary(dollars) {
    salary = dollars || 10
}

Это даст неожиданный результат при вызове, такой как

setSalary(0) 

. Он все равно установит 10, следуя описанному выше потоку.

В основном он проверяет, оценивается ли значение перед || как истинное, если да, он принимает это значение, если нет, он принимает значение после того, как ||.

Значения, для которых он примет значение после || (насколько я помню):

  • undefined
  • (я не смог найти эквивалентного словоблудия в спецификации ES2015, но он все равно будет иметь место). Снова На момент написания этой статьи в современных браузерах [
  • 0
  • » (Пустая или пустая строка)

оператор двойной трубы

этот пример полезен?

var section = document.getElementById('special');
if(!section){
     section = document.getElementById('main');
}

Component:

var section = document.getElementById('special') || document.getElementById('main');

— мои предпочтения. Он будет работать, когда переменная никогда не была объявлена, в отличие от любого сравнения с оператором ответа Cletus правильный, Я чувствую, что нужно добавить больше деталей в отношении «оценивается как ложное» в JavaScript.

var title = title || 'Error';
var msg   = msg || 'Error on Request';

. Он не только проверяет, было ли указано title / msg, но также и является ли один из них falsy . то есть одно из следующего:

  • ложный.
  • 0 (ноль)
  • «» (пустая строка)
  • ноль.
  • не определено.
  • NaN (специальное числовое значение, означающее Not-a-Number!)

Итак, в строке

var title = title || 'Error';

Если title является правдивым (т. Е. Не ложным, поэтому title = «titleMessage» и т. Д.), То логический оператор OR (||) нашел одно значение «true», что означает, что он оценивается как true , поэтому он замыкает накоротко и возвращает истинное значение (заголовок).

Я предлагаю шаблон создания структуры проверки на сервере и обмена ею с клиентом.

Также может показаться (после некоторого быстрого эксперимента с консолью firebug), если обе стороны оператора оценивают как false, он возвращает второй оператор ‘ложь’. { *}) появляться.

Чтобы добавить некоторые объяснения ко всему сказанному до меня, приведу несколько примеров, чтобы понять логические понятия.

return ("" || undefined)

возвращает неопределенное значение, возможно, это позволит вам использовать поведение, о котором идет речь в этом задании При попытке установить заголовок / сообщение по умолчанию в «». после запуска

var foo = undefined
foo = foo || ""

Для foo будет установлено значение «»

Это означает, что если левая сторона оценена как истинное утверждение, она будет завершена, а левая сторона будет возвращена и присвоена переменной. в других случаях правая сторона будет возвращена и назначена.

var name = false || "Mohsen"; # name equals to Mohsen
var family = true || "Alizadeh" # family equals to true

Это означает, что если левая сторона оценена как истинное утверждение, она будет завершена, а левая сторона будет возвращена и присвоена переменной. в других случаях правая сторона будет возвращена и назначена.

значения этого {{}} этого свойства Также для трассировки стека используйте:

var name = false && "Mohsen" # name equals to false
var family = true && "Alizadeh" # family equals to Alizadeh

Цитата: «Что означает конструкция x = x || y?»

Назначение значения по умолчанию.

Хроническое манипулирование сложно. Вот почему многие другие библиотеки глючат в крайних случаях. Moment.js, кажется, правильно настроил часовые пояса, но другие js-библиотеки, которые я видел, включая лексический , если x все еще ожидает своего значения, но еще не получил его или был намеренно опущен, чтобы вернуться к значению по умолчанию.

И я должен добавить еще одну вещь: эта стенография — мерзость. Он неправильно использует оптимизацию интерпретатора (не беспокоясь о второй операции, если первая верна) для управления назначением. Это использование не имеет ничего общего с целью оператора. Я не верю, что это когда-либо должно быть использовано.

Я предпочитаю троичный оператор для инициализации, например,

var title = title?title:'Error';

При этом используется условная операция в одну строку для правильного назначения. Он по-прежнему играет неприглядные игры с правдивостью, но это Javascript для вас.