Baseline Widely available
ШаблоннÑми лиÑеÑалами назÑваÑÑÑÑ ÑÑÑоковÑе лиÑеÑалÑ, допÑÑкаÑÑие иÑполÑзование вÑÑажений внÑÑÑи. С ними Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÑÑÑоÑнÑе лиÑеÑÐ°Ð»Ñ Ð¸ ÑÑÑоковÑÑ Ð¸Ð½ÑеÑполÑÑиÑ. Ð ÑпеÑиÑикаÑиÑÑ Ð´Ð¾ ES2015 они назÑвалиÑÑ "ÑаблоннÑми ÑÑÑоками".
СинÑакÑиÑ`ÑÑÑока ÑекÑÑа` `ÑÑÑока ÑекÑÑа 1 ÑÑÑока ÑекÑÑа 2` `ÑÑÑока ÑекÑÑа ${вÑÑажение} ÑÑÑока ÑекÑÑа` tag `ÑÑÑока ÑекÑÑа ${вÑÑажение} ÑÑÑока ÑекÑÑа`ÐпиÑание
ШаблоннÑе лиÑеÑÐ°Ð»Ñ Ð·Ð°ÐºÐ»ÑÑÐµÐ½Ñ Ð² обÑаÑнÑе кавÑÑки (` `) вмеÑÑо двойнÑÑ
или одинаÑнÑÑ
. Ðни могÑÑ ÑодеÑжаÑÑ Ð¿Ð¾Ð´ÑÑановки, обознаÑаемÑе знаком доллаÑа и ÑигÑÑнÑми Ñкобками (${вÑÑажение}
). ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² подÑÑановкаÑ
и ÑекÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸ пеÑедаÑÑÑÑ Ð² ÑÑнкÑиÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑнкÑÐ¸Ñ Ð¿ÑоÑÑо обÑединÑÐµÑ Ð²Ñе ÑаÑÑи в ÑÑÑокÑ. ÐÑли пеÑед ÑÑÑокой еÑÑÑ Ð²ÑÑажение (здеÑÑ ÑÑо tag
), Ñо ÑÐ°Ð±Ð»Ð¾Ð½Ð½Ð°Ñ ÑÑÑока назÑваеÑÑÑ "ÑеговÑм Ñаблоном". Ð ÑÑом ÑлÑÑае, Ñеговое вÑÑажение (обÑÑно ÑÑнкÑиÑ) вÑзÑваеÑÑÑ Ñ Ð¾Ð±ÑабоÑаннÑм ÑаблоннÑм лиÑеÑалом, коÑоÑÑй Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе измениÑÑ Ð¿ÐµÑед вÑводом. ÐÐ»Ñ ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑаÑной кавÑÑки в ÑаблоннÑÑ
лиÑеÑалаÑ
ÑказÑваеÑÑÑ Ð¾Ð±ÑаÑнÑй ÑÐ»ÐµÑ \.
`\`` === "`"; // --> true
ÐногоÑÑÑоÑнÑе лиÑеÑалÑ
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑÑоки ÑвлÑÑÑÑÑ ÑаÑÑÑÑ ÑаблоннÑÑ Ð»Ð¸ÑеÑалов. ÐÑполÑзÑÑ Ð¾Ð±ÑÑнÑе ÑÑÑоки, вÑÑавка пеÑеноÑа поÑÑебовала Ð±Ñ ÑледÑÑÑего ÑинÑакÑиÑа:
console.log("string text line 1\n" + "string text line 2");
// "string text line 1
// string text line 2"
То же Ñ Ð¸ÑполÑзованием ÑаблоннÑÑ Ð»Ð¸ÑеÑалов:
console.log(`string text line 1
string text line 2`);
// "string text line 1
// string text line 2"
ÐнÑеÑполÑÑÐ¸Ñ Ð²ÑÑажений
ÐÐ»Ñ Ð²ÑÑавки вÑÑажений в обÑÑнÑе ÑÑÑоки вам пÑиÑлоÑÑ Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑледÑÑÑий ÑинÑакÑиÑ:
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and not " + (2 * a + b) + ".");
// "Fifteen is 15 and not 20."
ТепеÑÑ, пÑи помоÑи ÑаблоннÑÑ Ð»Ð¸ÑеÑалов, вам доÑÑÑпен "ÑинÑакÑиÑеÑкий ÑÐ°Ñ Ð°Ñ", делаÑÑий подÑÑановки вÑоде Ñой более ÑиÑабелÑнÑми:
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`);
// "Fifteen is 15 and not 20."
ÐложеннÑе ÑаблонÑ
ÐÑеменами, вложиÑÑ Ñаблон â ÑÑо кÑаÑÑайÑий и, возможно, более ÑиÑабелÑнÑй ÑпоÑоб ÑоÑÑавиÑÑ ÑÑÑокÑ. ÐÑоÑÑо помеÑÑиÑе внÑÑÑÑ Ñаблона Ñ Ð¾Ð±ÑаÑнÑми кавÑÑками еÑÑ Ð¾Ð´Ð½Ð¸, обеÑнÑв иÑ
в подÑÑÐ°Ð½Ð¾Ð²ÐºÑ ${ }
. ÐапÑимеÑ, еÑли вÑÑажение иÑÑинно, можно веÑнÑÑÑ ÑаблоннÑй лиÑеÑал.
Ð ES5:
var classes = "header";
classes += isLargeScreen()
? ""
: item.isCollapsed
? " icon-expander"
: " icon-collapser";
Ð ES2015 Ñ ÑаблоннÑми лиÑеÑалами без вложениÑ:
const classes = `header ${
isLargeScreen() ? "" : item.isCollapsed ? "icon-expander" : "icon-collapser"
}`;
Ð ES2015 Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми ÑаблоннÑми лиÑеÑалами:
const classes = `header ${
isLargeScreen() ? "" : `icon-${item.isCollapsed ? "expander" : "collapser"}`
}`;
ТеговÑе ÑаблонÑ
РаÑÑиÑенной ÑоÑмой ÑаблоннÑÑ Ð»Ð¸ÑеÑалов ÑвлÑÑÑÑÑ ÑеговÑе ÑаблонÑ. Ðни позволÑÑÑ ÑазбиÑаÑÑ ÑаблоннÑе лиÑеÑÐ°Ð»Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии. ÐеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ñакой ÑÑнкÑии ÑодеÑÐ¶Ð¸Ñ Ð¼Ð°ÑÑив ÑÑÑоковÑÑ Ð·Ð½Ð°Ñений, а оÑÑалÑнÑе ÑодеÑÐ¶Ð°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· подÑÑановок. РиÑоге, ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° веÑнÑÑÑ ÑобÑаннÑÑ ÑÑÑÐ¾ÐºÑ (или ÑÑо-либо ÑовÑем иное, как бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾ далее). ÐÐ¼Ñ ÑÑнкÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»ÑбÑм.
var person = "Mike";
var age = 28;
function myTag(strings, personExp, ageExp) {
var str0 = strings[0]; // "That "
var str1 = strings[1]; // " is a "
// ТеÑ
ниÑеÑки, в конÑе иÑогового вÑÑажениÑ
// (в наÑем пÑимеÑе) еÑÑÑ ÐµÑÑ Ð¾Ð´Ð½Ð° ÑÑÑока,
// но она пÑÑÑÐ°Ñ (""), Ñак ÑÑо пÑопÑÑÑим еÑ.
// var str2 = strings[2];
var ageStr;
if (ageExp > 99) {
ageStr = "centenarian";
} else {
ageStr = "youngster";
}
// ÐÑ Ð´Ð°Ð¶Ðµ можем веÑнÑÑÑ ÑÑÑокÑ, поÑÑÑоеннÑÑ Ð´ÑÑгим ÑаблоннÑм лиÑеÑалом
return `${str0}${personExp}${str1}${ageStr}`;
}
var output = myTag`That ${person} is a ${age}`;
console.log(output);
// That Mike is a youngster
ФÑнкÑÐ¸Ñ Ñега не обÑзана возвÑаÑаÑÑ ÑÑÑокÑ, как показано в пÑимеÑе ниже:
function template(strings, ...keys) {
return function (...values) {
var dict = values[values.length - 1] || {};
var result = [strings[0]];
keys.forEach(function (key, i) {
var value = Number.isInteger(key) ? values[key] : dict[key];
result.push(value, strings[i + 1]);
});
return result.join("");
};
}
var t1Closure = template`${0}${1}${0}!`;
t1Closure("Y", "A"); // "YAY!"
var t2Closure = template`${0} ${"foo"}!`;
t2Closure("Hello", { foo: "World" }); // "Hello World!"
СÑÑÑе ÑÑÑоки
СпеÑиалÑное ÑвойÑÑво raw
, доÑÑÑпное Ð´Ð»Ñ Ð¿ÐµÑвого аÑгÑменÑа Ñегового Ñаблона, позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑÑÐ¾ÐºÑ Ð² Ñом виде, в каком она бÑла введена, без ÑкÑаниÑованиÑ.
function tag(strings) {
return strings.raw[0];
}
tag`string text line 1 \\n string text line 2`;
// вÑÐ²Ð¾Ð´Ð¸Ñ "string text line 1 \\n string text line 2",
// вклÑÑÐ°Ñ 'n' и два Ñимвола '\'
Ðдобавок, ÑÑÑеÑÑвÑÐµÑ Ð¼ÐµÑод String.raw()
, возвÑаÑаÑÑий ÑоÑно ÑакÑÑ Ð¶Ðµ иÑÑ
однÑÑ ÑÑÑокÑ, какÑÑ Ð²ÐµÑнÑла Ð±Ñ ÑÑнкÑÐ¸Ñ Ñаблона по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ ÑÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÐºÐ°ÑенаÑÐ¸Ñ Ð²Ð¼ÐµÑÑе.
var str = String.raw`Hi\n${2 + 3}!`;
// "Hi\n5!"
str.length;
// 6
str.split("").join(",");
// "H,i,\,n,5,!"
ТеговÑе ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¸ ÑкÑаниÑование Ñимволов Ðоведение в ES2016
Ð ECMAScript 2016 ÑеговÑе ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑледÑÑÑ Ð¿Ñавилам ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑледÑÑÑÐ¸Ñ Ñимволов:
\u00A9
\u{2F804}
\xA9
\251
ÐÑÑÑда вÑÑÐµÐºÐ°ÐµÑ Ð¿Ñоблема ÑеговÑÑ
Ñаблонов: ÑледÑÑ Ð³ÑаммаÑике ECMAScript, анализаÑÐ¾Ñ ÐºÐ¾Ð´Ð°, Ð½Ð°Ð¹Ð´Ñ Ñимвол \
, бÑÐ´ÐµÑ Ð¸ÑкаÑÑ ÐºÐ¾ÑÑекÑное пÑедÑÑавление Ñимвола Unicode, но Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ найÑи его вовÑе. ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ показÑÐ²Ð°ÐµÑ ÑÑо:
latex`\unicode`;
// Ð ÑÑаÑÑÑ
веÑÑиÑÑ
ECMAScript (ES2016 и ÑанÑÑе) вÑÐºÐ¸Ð½ÐµÑ Ð¸ÑклÑÑение:
// SyntaxError: malformed Unicode character escape sequence
Ðоведение в ES2018
ТеговÑе ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð²ÑÑÑаиваÑÑ ÑзÑки (напÑимеÑ, DSLs или LaTeX), в коÑоÑÑÑ ÑиÑоко иÑполÑзÑÑÑÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ дÑÑгие ÑкÑаниÑованиÑ. ÐÑедложение РедакÑÐ¸Ñ ÑаблоннÑÑ Ð»Ð¸ÑеÑалов (ÑÑÐ¾Ð²ÐµÐ½Ñ 4, одобÑеннÑй к Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑÑандаÑÑ ECMAScript 2018) ÑÑÑÑанÑÐµÑ ÑинÑакÑиÑеÑкие огÑаниÑÐµÐ½Ð¸Ñ ÑкÑаниÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеговÑÑ Ñаблонов в ECMAScript.
Ðднако, некоÑÑекÑное ÑкÑаниÑование Ñимволов по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð½Ñжно оÑобÑажаÑÑ Ð² "пÑигоÑовленном" оÑобÑажении. Ðно показÑваеÑÑÑ Ð² виде undefined
в "пÑигоÑовленном" маÑÑиве:
function latex(str) {
return { cooked: str[0], raw: str.raw[0] };
}
latex`\unicode`;
// { cooked: undefined, raw: "\unicode" }
ÐамеÑÑÑе, ÑÑо огÑаниÑение на ÑкÑаниÑование Ñимволов пÑоÑвлÑеÑÑÑ Ð»Ð¸ÑÑ Ð² ÑеговÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ð°Ñ , и не пÑоÑвлÑеÑÑÑ Ð² неÑеговÑÑ ÑаблоннÑÑ Ð»Ð¸ÑеÑÐ°Ð»Ð°Ñ :
let bad = `bad escape sequence: \unicode`;
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
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