Baseline Widely available
ÐпеÑаÑÐ¾Ñ Ð½Ñлевого ÑлиÑÐ½Ð¸Ñ (??
) â ÑÑо логиÑеÑкий опеÑаÑоÑ, возвÑаÑаÑÑий знаÑение пÑавого опеÑанда, еÑли знаÑение левого опеÑанда ÑодеÑÐ¶Ð¸Ñ null
или undefined
, в пÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ Ð·Ð½Ð°Ñение левого опеÑанда.
ÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑаÑÑмаÑÑиваÑÑ ÐºÐ°Ðº ÑаÑÑнÑй ÑлÑÑай логиÑеÑкого опеÑаÑоÑа ÐÐÐ (||
), коÑоÑÑй возвÑаÑÐ°ÐµÑ Ð¿ÑавÑй опеÑанд, еÑли в левом опеÑанде Ñ
ÑаниÑÑÑ Ð»Ñбое ложноподобное знаÑение, а не ÑолÑко null
или undefined
. ÐÑÑгими Ñловами, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе опеÑаÑÐ¾Ñ ||
Ð´Ð»Ñ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´ÑÑгой пеÑеменной foo
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñм поведением, еÑли ÑÑиÑаеÑе некоÑоÑÑе ложноподобнÑе знаÑÐµÐ½Ð¸Ñ Ð¿ÑигоднÑми Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ (напÑимеÑ, ''
или 0
). Ðиже Ð²Ñ ÑвидиÑе пÑимеÑÑ.
ÐпеÑаÑÐ¾Ñ Ð½Ñлевого ÑлиÑÐ½Ð¸Ñ Ð²Ð¼ÐµÑÑе Ñ ||
наÑ
одиÑÑÑ Ð½Ð° ÑеÑвÑÑÑом по пÑиоÑиÑеÑноÑÑи меÑÑе, непоÑÑедÑÑвенно пеÑед ним ÑледÑÐµÑ ÑÑловнÑй (ÑеÑнаÑнÑй) опеÑаÑоÑ.
const foo = null ?? "default string";
console.log(foo);
// Expected output: "default string"
const baz = 0 ?? 42;
console.log(baz);
// Expected output: 0
СинÑакÑÐ¸Ñ ÐÑимеÑÑ ÐÑполÑзование опеÑаÑоÑа нÑлевого ÑлиÑниÑ
Ð ÑÑом пÑимеÑе показано как ÑÑÑанавливаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, оÑлиÑнÑе Ð¾Ñ null
или undefined
.
const nullValue = null;
const emptyText = ""; // ложноподобное
const someNumber = 42;
const valA = nullValue ?? "знаÑение Ð´Ð»Ñ A";
const valB = emptyText ?? "знаÑение Ð´Ð»Ñ B";
const valC = someNumber ?? 0;
console.log(valA); // "знаÑение Ð´Ð»Ñ A"
console.log(valB); // "" (поÑколÑÐºÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока не пÑиÑавниваеÑÑÑ Ðº null или undefined)
console.log(valC); // 42
ÐÑиÑваивание пеÑеменной знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
Ранее, когда нÑжно бÑло пÑиÑвоиÑÑ Ð¿ÐµÑеменной знаÑение по ÑмолÑаниÑ, ÑаÑÑо иÑполÑзовалÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÐÐÐ (||
):
let foo;
// foo еÑÑ Ð½Ðµ бÑло пÑиÑвоено знаÑение, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¾ undefined
let someDummyText = foo || "Hello!";
Ðднако поÑколÑÐºÑ ||
ÑвлÑеÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑким опеÑаÑоÑом, левÑй опеÑанд бÑл пÑинÑдиÑелÑно пÑиведен к бÑÐ»ÐµÐ²Ñ Ð·Ð½Ð°ÑениÑ, игноÑиÑÑÑ Ð»Ñбое ложноподобное знаÑение (0
, ''
, NaN
, null
, undefined
). ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к некоÑÑекÑной ÑабоÑе кода, еÑли нÑжно ÑÑиÑÑваÑÑ Ñакие знаÑениÑ, как 0
, ''
, или NaN
.
let count = 0;
let text = "";
let qty = count || 42;
let message = text || "hi!";
console.log(qty); // 42, но не 0
console.log(message); // "hi!", но не ""
ÐпеÑаÑÐ¾Ñ Ð½Ñлевого ÑлиÑÐ½Ð¸Ñ Ð¿ÑедоÑвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ðµ в ÑакÑÑ Ð»Ð¾Ð²ÑÑкÑ, возвÑаÑÐ°Ñ Ð²ÑоÑой опеÑанд, ÑолÑко еÑли пеÑвÑй Ñавен null
или undefined
(и не лÑбÑм дÑÑгим ложноподобнÑм знаÑением):
let myText = ""; // ÐÑÑÑÐ°Ñ ÑÑÑока (ложноподобное знаÑение)
let notFalsyText = myText || "ÐÑивеÑ, миÑ";
console.log(notFalsyText); // ÐÑивеÑ, миÑ
let preservingFalsy = myText ?? "ÐÑивеÑ, ÑоÑед";
console.log(preservingFalsy); // '' (Ñ.к. myText не ни undefined, ни null)
СокÑаÑÑнное вÑÑиÑление
Так же как пÑи иÑполÑзовании опеÑаÑоÑов логиÑеÑкого Ри ÐÐÐ, пÑавое вÑÑажение не вÑÑиÑлÑеÑÑÑ, еÑли знаÑение в левом вÑÑажении не ÑавнÑеÑÑÑ null
или undefined
function A() {
console.log("вÑзвана A");
return undefined;
}
function B() {
console.log("вÑзвана B");
return false;
}
function C() {
console.log("вÑзвана C");
return "foo";
}
console.log(A() ?? C());
// в конÑоли бÑÐ´ÐµÑ Ð±ÑÐ´ÐµÑ Ð²Ñведено "вÑзвана A", поÑле "вÑзвана C", и заÑем "foo",
// Ñ.к. A() возвÑаÑÐ°ÐµÑ undefined, поÑÑÐ¾Ð¼Ñ Ð¾Ð±Ð° вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±Ñли вÑÑиÑленÑ
console.log(B() ?? C());
// в конÑоли бÑÐ´ÐµÑ Ð²Ñведено "вÑзвана B", заÑем "false",
// Ñак B() возвÑаÑÐ°ÐµÑ false (не null или undefined), Ñо
// пÑавое вÑÑажение не вÑÑиÑлÑеÑÑÑ
ÐÑполÑзование вмеÑÑе Ñ Ð¾Ð¿ÐµÑаÑоÑами Рили ÐÐÐ
Ðе полÑÑиÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð (&&
) и ÐÐÐ (||
) вмеÑÑе Ñ Ð¾Ð¿ÐµÑаÑоÑом ??
в одном вÑÑажении. Ð ÑакиÑ
ÑлÑÑаÑÑ
бÑÐ´ÐµÑ Ð²Ñзвана оÑибка SyntaxError
.
null || undefined ?? "foo"; // вÑзÑÐ²Ð°ÐµÑ SyntaxError
true || undefined ?? "foo"; // вÑзÑÐ²Ð°ÐµÑ SyntaxError
Ðо еÑли Ñвно ÑказаÑÑ Ð¿ÑиоÑиÑеÑ, Ñоздав подвÑÑажение ÑеÑез кÑÑглÑе Ñкобки, Ñо вÑÑ Ð·Ð°ÑабоÑаеÑ:
(null || undefined) ?? "foo"; // веÑнÑÑ "foo"
ÐÑполÑзование ÑовмеÑÑно Ñ Ð¾Ð¿ÐµÑаÑоÑом опÑионалÑной поÑледоваÑелÑноÑÑи (?.
)
ÐпеÑаÑÐ¾Ñ Ð½Ñлевого ÑлиÑÐ½Ð¸Ñ ÑÑиÑÑÐ²Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ undefined
и null
, по аналогии как и опеÑаÑÐ¾Ñ Ð¾Ð¿ÑионалÑной поÑледоваÑелÑноÑÑи (?.
)(/ru/docs/Web/JavaScript/Reference/Operators/Optional_chaining), коÑоÑÑй позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¾Ñибок пÑи обÑаÑении к ÑвойÑÑÐ²Ñ Ð¾Ð±ÑекÑа, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ null
или undefined
.
let foo = { someFooProp: "пÑивеÑ" };
console.log(foo.someFooProp?.toUpperCase() ?? "Ð½ÐµÑ Ð·Ð½Ð°ÑениÑ"); // "ÐÐ ÐÐÐТ"
console.log(foo.someBarProp?.toUpperCase() ?? "Ð½ÐµÑ Ð·Ð½Ð°ÑениÑ"); // "Ð½ÐµÑ Ð·Ð½Ð°ÑениÑ"
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4