Это шаблон по умолчанию..
То, что у вас есть в вашем фрагменте, является наиболее распространенным способом реализации шаблона по умолчанию, он вернет значение первого операнда, которое дает значение true при преобразовании в логическое значение. .
var some_data = undefined;
var some_obj_1 = undefined;
var some_obj_2 = {foo: 123};
var str = some_data || "default";
var obj = some_obj1 || some_obj2 || {};
/* str == "default", obj == {foo: 123} */
вышеупомянутое в основном эквивалентно выполнению следующей более подробной альтернативы
var str = undefined;
var obj = undefined;
if (some_data) str = some_data;
else str = "default";
if (some_obj1) obj = some_obj1;
else if (some_obj2) obj = some_obj2;
else obj = {};
примеры значений, получаемых с помощью логического оператора ИЛИ:
1 || 3 -> 1
0 || 3 -> 3
undefined || 3 -> 3
NaN || 3 -> 3
"" || "default" -> "default"
undefined || undefined -> undefined
false || true -> true
true || false -> true
null || "test" -> "test"
undefined || {} -> {}
{} || true -> {}
<суп>суп>
null || false || {} -> {}
0 || "!!" || 9 -> "!!"
Как видите, если совпадений не найдено, значением последнего операнда является yield.
Когда это полезно?
Есть несколько случаев, хотя наиболее популярным является установка значения аргументов функции по умолчанию, как показано ниже:
function do_something (some_value) {
some_value = some_value || "hello world";
console.log ("saying: " + some_value);
}
...
do_something ("how ya doin'?");
do_something ();
<суп>суп>
saying: how ya doin'?
saying: hello world
Примечания
Это заметное одно из отличий javascript от многих других популярных языков программирования.
Оператор ||
не возвращает неявно логическое значение, но сохраняет типы операндов и возвращает первый, который будет оценен как истина в логическом выражении.
Многие программисты, работающие с языками, где это не так (C, C++, PHP, Python и т. д., и т. д.), поначалу находят это довольно запутанным, и, конечно, всегда бывает наоборот; люди, пришедшие из javascript (perl и т. д.), задаются вопросом, почему эта функция не реализована где-либо еще.
person
Filip Roséen - refp
schedule
19.07.2012
var
- person Bergi   schedule 04.08.2014