ÐÑÑÑ ÑÑд ÑлÑÑÑений и новÑÑ Ð¼ÐµÑодов Ð´Ð»Ñ ÑÑÑок.
ÐаÑнÑм Ñ, пожалÑй, Ñамого важного.
СÑÑоки-ÑаблонÑ
Ðобавлен новÑй вид кавÑÑек Ð´Ð»Ñ ÑÑÑок:
let str = `обÑаÑнÑе кавÑÑки`;
ÐÑновнÑе оÑлиÑÐ¸Ñ Ð¾Ñ Ð´Ð²Ð¾Ð¹Ð½ÑÑ
"â¦" и одинаÑнÑÑ
'â¦' кавÑÑек:
-
Ð Ð½Ð¸Ñ ÑазÑеÑÑн пеÑевод ÑÑÑоки.
ÐапÑимеÑ:
alert(`Ð¼Ð¾Ñ Ð¼Ð½Ð¾Ð³Ð¾ÑÑÑоÑÐ½Ð°Ñ ÑÑÑока`);ÐамеÑим, ÑÑо пÑÐ¾Ð±ÐµÐ»Ñ Ð¸, ÑобÑÑвенно, пеÑевод ÑÑÑоки Ñакже Ð²Ñ Ð¾Ð´ÑÑ Ð² ÑÑÑокÑ, и бÑдÑÑ Ð²ÑведенÑ.
-
Ðожно вÑÑавлÑÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи помоÑи
${â¦}.ÐапÑимеÑ:
'use strict'; let apples = 2; let oranges = 3; alert(`${apples} + ${oranges} = ${apples + oranges}`); // 2 + 3 = 5Ðак видно, пÑи помоÑи
${â¦}можно вÑÑавлÑÑÑ ÐºÐ°Ðº и знаÑение пеÑеменной${apples}, Ñак и более ÑложнÑе вÑÑажениÑ, коÑоÑÑе могÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð² ÑÐµÐ±Ñ Ð¾Ð¿ÐµÑаÑоÑÑ, вÑÐ·Ð¾Ð²Ñ ÑÑнкÑий и Ñ.п. ТакÑÑ Ð²ÑÑÐ°Ð²ÐºÑ Ð½Ð°Ð·ÑваÑÑ Â«Ð¸Ð½ÑеÑполÑÑией».
ФÑнкÑии ÑаблонизаÑии
Ðожно иÑполÑзоваÑÑ ÑÐ²Ð¾Ñ ÑÑнкÑÐ¸Ñ ÑаблонизаÑии Ð´Ð»Ñ ÑÑÑок.
Ðазвание ÑÑой ÑÑнкÑии ÑÑавиÑÑÑ Ð¿ÐµÑед пеÑвой обÑаÑной кавÑÑкой:
let str = func`Ð¼Ð¾Ñ ÑÑÑока`;
ÐÑа ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки вÑзвана и полÑÑÐ¸Ñ Ð² каÑеÑÑве аÑгÑменÑов ÑÑÑокÑ, ÑазбиÑÑÑ Ð¿Ð¾ вÑ
ождениÑм паÑамеÑÑов ${â¦} и Ñами ÑÑи паÑамеÑÑÑ.
ÐапÑимеÑ:
'use strict';
function f(strings, ...values) {
alert(JSON.stringify(strings)); // ["Sum of "," + "," =\n ","!"]
alert(JSON.stringify(strings.raw)); // ["Sum of "," + "," =\\n ","!"]
alert(JSON.stringify(values)); // [3,5,8]
}
let apples = 3;
let oranges = 5;
// | s[0] | v[0] |s[1]| v[1] |s[2] | v[2] |s[3]
let str = f`Sum of ${apples} + ${oranges} =\n ${apples + oranges}!`;
РпÑимеÑе вÑÑе видно, ÑÑо ÑÑÑока ÑазбиваеÑÑÑ Ð¿Ð¾ оÑеÑеди на ÑаÑÑи: «кÑÑок ÑÑÑоки» â «паÑамеÑÑ» â «кÑÑок ÑÑÑоки» â «паÑамеÑÑ».
- УÑаÑÑки ÑÑÑоки идÑÑ Ð² пеÑвÑй аÑгÑменÑ-маÑÑив
strings. - У ÑÑого маÑÑива еÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное ÑвойÑÑво
strings.raw. РнÑм Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ ÑÑÑоки в ÑоÑноÑÑи как в оÑигинале. ÐÑо влиÑÐµÑ Ð½Ð° ÑпеÑ-ÑимволÑ, напÑÐ¸Ð¼ÐµÑ Ð²stringsÑимвол\nâ ÑÑо пеÑевод ÑÑÑоки, а вstrings.rawâ ÑÑо именно два Ñимвола\n. - ÐалÑнейÑий ÑпиÑок аÑгÑменÑов ÑÑнкÑии ÑаблонизаÑии â ÑÑо знаÑÐµÐ½Ð¸Ñ Ð²ÑÑажений в
${...}, в данном ÑлÑÑае Ð¸Ñ ÑÑи.
strings.raw?РоÑлиÑие Ð¾Ñ strings, в strings.raw ÑодеÑжаÑÑÑ ÑÑаÑÑки ÑÑÑоки в «изнаÑалÑно введÑнном» виде.
То еÑÑÑ, еÑли в ÑÑÑоке наÑ
одиÑÑÑ \n или \u1234 или дÑÑгое оÑобое ÑоÑеÑание Ñимволов, Ñо оно Ñаким и оÑÑанеÑÑÑ.
ÐÑо нÑжно в ÑÐµÑ ÑлÑÑаÑÑ , когда ÑÑнкÑÐ¸Ñ ÑаблонизаÑии Ñ Ð¾ÑÐµÑ Ð¿ÑоизвеÑÑи обÑабоÑÐºÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑамоÑÑоÑÑелÑно (Ñвои ÑпеÑ. ÑимволÑ?). Ðли же когда обÑабоÑка ÑпеÑ. Ñимволов не нÑжна â напÑимеÑ, ÑÑÑока ÑодеÑÐ¶Ð¸Ñ Â«Ð¾Ð±ÑÑнÑй ÑекÑÑ», набÑаннÑй непÑогÑаммиÑÑом без ÑÑÑÑа ÑпеÑ. Ñимволов.
Ðак видно, ÑÑнкÑÐ¸Ñ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп ко вÑемÑ: к вÑÑажениÑм, к ÑÑаÑÑкам ÑекÑÑа и даже, ÑеÑез strings.raw â к оÑигиналÑно введÑÐ½Ð½Ð¾Ð¼Ñ ÑекÑÑÑ Ð±ÐµÐ· ÑÑÑÑа ÑÑандаÑÑнÑÑ
ÑпеÑ. Ñимволов.
ФÑнкÑÐ¸Ñ ÑаблонизаÑии Ð¼Ð¾Ð¶ÐµÑ ÐºÐ°Ðº-Ñо пÑеобÑазоваÑÑ ÑÑÑÐ¾ÐºÑ Ð¸ веÑнÑÑÑ Ð½Ð¾Ð²Ñй ÑезÑлÑÑаÑ.
РпÑоÑÑейÑем ÑлÑÑае можно пÑоÑÑо «ÑклеиÑÑ» полÑÑеннÑе ÑÑагменÑÑ Ð² ÑÑÑокÑ:
'use strict';
// str воÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑÑÑокÑ
function str(strings, ...values) {
let str = "";
for(let i=0; i<values.length; i++) {
str += strings[i];
str += values[i];
}
// поÑледний кÑÑок ÑÑÑоки
str += strings[strings.length-1];
return str;
}
let apples = 3;
let oranges = 5;
// Sum of 3 + 5 = 8!
alert( str`Sum of ${apples} + ${oranges} = ${apples + oranges}!`);
ФÑнкÑÐ¸Ñ str в пÑимеÑе вÑÑе Ð´ÐµÐ»Ð°ÐµÑ Ñо же Ñамое, ÑÑо обÑÑнÑе обÑаÑнÑе кавÑÑки. Ðо, конеÑно, можно пойÑи намного далÑÑе. ÐапÑимеÑ, генеÑиÑоваÑÑ Ð¸Ð· HTML-ÑÑÑоки DOM-ÑÐ·Ð»Ñ (ÑÑнкÑии ÑаблонизаÑии не обÑзаÑелÑно возвÑаÑаÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑÑокÑ).
Ðли можно ÑеализоваÑÑ Ð¸Ð½ÑеÑнаÑионализаÑиÑ. РпÑимеÑе ниже ÑÑнкÑÐ¸Ñ i18n оÑÑÑеÑÑвлÑÐµÑ Ð¿ÐµÑевод ÑÑÑоки.
Ðна подбиÑÐ°ÐµÑ Ð¿Ð¾ ÑÑÑоке вида "Hello, ${name}!" Ñаблон пеÑевода "ÐÑивеÑ, {0}!" (где {0} â меÑÑо Ð´Ð»Ñ Ð²ÑÑавки паÑамеÑÑа) и возвÑаÑÐ°ÐµÑ Ð¿ÐµÑеведÑннÑй ÑезÑлÑÑÐ°Ñ Ñо вÑÑавленнÑм именем name:
'use strict';
let messages = {
"Hello, {0}!": "ÐÑивеÑ, {0}!"
};
function i18n(strings, ...values) {
// Ðо ÑоÑме ÑÑÑоки полÑÑим Ñаблон Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в messages
// Ðа меÑÑе каждого из знаÑений бÑÐ´ÐµÑ ÐµÐ³Ð¾ номеÑ: {0}, {1}, â¦
let pattern = "";
for(let i=0; i<values.length; i++) {
pattern += strings[i] + '{' + i + '}';
}
pattern += strings[strings.length-1];
// ТепеÑÑ pattern = "Hello, {0}!"
let translated = messages[pattern]; // "ÐÑивеÑ, {0}!"
// ÐÐ°Ð¼ÐµÐ½Ð¸Ñ Ð² "ÐÑивеÑ, {0}" ÑиÑÑÑ Ð²Ð¸Ð´Ð° {num} на values[num]
return translated.replace(/\{(\d)\}/g, (s, num) => values[num]);
}
// ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ
let name = "ÐаÑÑ";
// ÐеÑевеÑÑи ÑÑÑокÑ
alert( i18n`Hello, ${name}!` ); // ÐÑивеÑ, ÐаÑÑ!
ÐÑоговое иÑполÑзование вÑглÑÐ´Ð¸Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно кÑаÑиво, не пÑавда ли?
РазÑмееÑÑÑ, ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑлÑÑÑиÑÑ Ð¸ ÑаÑÑиÑиÑÑ. ФÑнкÑÐ¸Ñ ÑаблонизаÑии â ÑÑо Ñвоего Ñода «ÑÑандаÑÑнÑй ÑинÑакÑиÑеÑкий ÑÐ°Ñ Ð°Ñ» Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ паÑÑинга ÑÑÑок.
УлÑÑÑена поддеÑжка Юникода
ÐнÑÑÑеннÑÑ ÐºÐ¾Ð´Ð¸Ñовка ÑÑÑок в JavaScript â ÑÑо UTF-16, Ñо еÑÑÑ Ð¿Ð¾Ð´ каждÑй Ñимвол оÑводиÑÑÑ Ñовно два байÑа.
Ðо под вÑевозможнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²ÑÐµÑ ÑзÑков миÑа 2 Ð±Ð°Ð¹Ñ Ð½Ðµ Ñ Ð²Ð°ÑаеÑ. ÐоÑÑÐ¾Ð¼Ñ Ð±ÑÐ²Ð°ÐµÑ Ñак, ÑÑо Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑзÑка ÑооÑвеÑÑÑвÑÐµÑ Ð´Ð²Ð° ЮникоднÑÑ Ñимвола (иÑого 4 байÑа). Такое ÑоÑеÑание назÑваÑÑ Â«ÑÑÑÑогаÑной паÑой».
СамÑй ÑаÑÑÑй пÑÐ¸Ð¼ÐµÑ ÑÑÑÑогаÑной паÑÑ, коÑоÑÑй можно вÑÑÑеÑиÑÑ Ð² лиÑеÑаÑÑÑе â ÑÑо киÑайÑкие иеÑоглиÑÑ.
ÐамеÑим, однако, ÑÑо не вÑÑкий киÑайÑкий иеÑÐ¾Ð³Ð»Ð¸Ñ â ÑÑÑÑогаÑÐ½Ð°Ñ Ð¿Ð°Ñа. СÑÑеÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑаÑÑÑ Â«Ð¾Ñновного» Юникод-диапазона как Ñаз оÑдана под киÑайÑкий ÑзÑк, поÑÑÐ¾Ð¼Ñ Ð½ÐµÐºÐ¾ÑоÑÑе иеÑоглиÑÑ â коÑоÑÑе в Ð½ÐµÑ Â«Ð²Ð»ÐµÐ·Ð»Ð¸Â» â пÑедÑÑавлÑÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ Юникод-Ñимволом, а Ñе, коÑоÑÑе не помеÑÑилиÑÑ (Ñеже иÑполÑзÑемÑе) â двÑмÑ.
ÐапÑимеÑ:
alert( 'æ'.length ); // 1
alert( 'ð©·¶'.length ); // 2
Ð ÑекÑÑе вÑÑе Ð´Ð»Ñ Ð¿ÐµÑвого иеÑоглиÑа еÑÑÑ Ð¾ÑделÑнÑй Юникод-Ñимвол, и поÑÑÐ¾Ð¼Ñ Ð´Ð»Ð¸Ð½Ð° ÑÑÑоки 1, а Ð´Ð»Ñ Ð²ÑоÑого иÑполÑзÑеÑÑÑ ÑÑÑÑогаÑÐ½Ð°Ñ Ð¿Ð°Ñа. СооÑвеÑÑÑвенно, длина â 2.
ÐиÑайÑкими иеÑоглиÑами ÑÑÑÑогаÑнÑе паÑÑ, еÑÑеÑÑвенно, не огÑаниÑиваÑÑÑÑ.
Ðми пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ñедкие маÑемаÑиÑеÑкие ÑимволÑ, а Ñакже некоÑоÑÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð»Ñ ÑмоÑий, к пÑимеÑÑ:
alert( 'ð³'.length ); // 2, MATHEMATICAL SCRIPT CAPITAL X
alert( 'ð'.length ); // 2, FACE WITH TEARS OF JOY
Ð ÑовÑеменнÑй JavaScript Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¼ÐµÑÐ¾Ð´Ñ String.fromCodePoint и str.codePointAt â аналоги String.fromCharCode и str.charCodeAt, коÑÑекÑно ÑабоÑаÑÑие Ñ ÑÑÑÑогаÑнÑми паÑами.
ÐапÑимеÑ, charCodeAt ÑÑиÑÐ°ÐµÑ ÑÑÑÑогаÑнÑÑ Ð¿Ð°ÑÑ Ð´Ð²ÑÐ¼Ñ ÑазнÑми Ñимволами и возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´ каждой:
// как бÑдÑо в ÑÑÑоке два ÑазнÑÑ
Ñимвола (на Ñамом деле один)
alert( 'ð³'.charCodeAt(0) + ' ' + 'ð³'.charCodeAt(1) ); // 55349 56499
â¦Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº codePointAt возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ Unicode-код ÑÑÑÑогаÑной паÑÑ Ð¿ÑавилÑно:
// один Ñимвол Ñ "длиннÑм" (более 2 байÑ) unicode-кодом
alert( 'ð³'.codePointAt(0) ); // 119987
ÐеÑод String.fromCodePoint(code) коÑÑекÑно ÑоздаÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð· «длинного кода», в оÑлиÑие Ð¾Ñ ÑÑаÑого String.fromCharCode(code).
ÐапÑимеÑ:
// ÐÑавилÑно
alert( String.fromCodePoint(119987) ); // ð³
// ÐевеÑно!
alert( String.fromCharCode(119987) ); // í³
Ðолее ÑÑаÑÑй меÑод fromCharCode в поÑледней ÑÑÑоке дал невеÑнÑй ÑезÑлÑÑаÑ, Ñак как он беÑÑÑ ÑолÑко пеÑвÑе два байÑа Ð¾Ñ ÑиÑла 119987 и ÑоздаÑÑ Ñимвол из ниÑ
, а оÑÑалÑнÑе оÑбÑаÑÑваеÑ.
\u{длиннÑй код}
ÐÑÑÑ Ð¸ еÑÑ ÑинÑакÑиÑеÑкое ÑлÑÑÑение Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Unicode-кодов.
Ð JavaScript-ÑÑÑÐ¾ÐºÐ°Ñ Ð´Ð°Ð²Ð½Ð¾ можно вÑÑавлÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾ Unicode-кодÑ, Ð²Ð¾Ñ Ñак:
alert( "\u2033" ); // â³, Ñимвол двойного ÑÑÑиÑ
а
СинÑакÑиÑ: \uNNNN, где NNNN â ÑеÑÑÑÑÑ
знаÑнÑй ÑеÑÑнадÑаÑиÑиÑнÑй код, пÑиÑÑм он должен бÑÑÑ Ñовно ÑеÑÑÑÑÑ
знаÑнÑм.
«ÐиÑние» ÑиÑÑÑ Ñже не войдÑÑ Ð² код, напÑимеÑ:
alert( "\u20331" ); // Ðва Ñимвола: Ñимвол двойного ÑÑÑиÑ
а â³, а заÑем 1
ЧÑÐ¾Ð±Ñ Ð²Ð²Ð¾Ð´Ð¸ÑÑ Ð±Ð¾Ð»ÐµÐµ длиннÑе ÐºÐ¾Ð´Ñ Ñимволов, добавили запиÑÑ \u{NNNNNNNN}, где NNNNNNNN â макÑималÑно воÑÑмизнаÑнÑй (но можно и менÑÑе ÑиÑÑ) код.
ÐапÑимеÑ:
alert( "\u{20331}" ); // ð ±, киÑайÑкий иеÑÐ¾Ð³Ð»Ð¸Ñ Ñ ÑÑим кодом
Unicode-ноÑмализаÑиÑ
Ðо Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑзÑÐºÐ°Ñ ÐµÑÑÑ ÑимволÑ, коÑоÑÑе полÑÑаÑÑÑÑ ÐºÐ°Ðº ÑоÑеÑание оÑновного Ñимвола и какого-Ñо знаÑка над ним или под ним.
ÐапÑимеÑ, на оÑнове обÑÑного Ñимвола a ÑÑÑеÑÑвÑÑÑ ÑимволÑ: à áâäãåÄ. СамÑе ÑаÑÑо вÑÑÑеÑаÑÑиеÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе ÑоÑеÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÑÑ Ð¾ÑделÑнÑй ЮникоднÑй код. Ðо оÑнÑÐ´Ñ Ð½Ðµ вÑе.
ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии пÑоизволÑнÑÑ ÑоÑеÑаний иÑполÑзÑÑÑÑÑ Ð½ÐµÑколÑко ЮникоднÑÑ Ñимволов: оÑнова и один или неÑколÑко знаÑков.
ÐапÑимеÑ, еÑли поÑле Ñимвола S идÑÑ Ñимвол «ÑоÑка ÑвеÑÑ
Ñ» (код \u0307), Ñо показано ÑÑо бÑÐ´ÐµÑ ÐºÐ°Ðº «S Ñ ÑоÑкой ÑвеÑÑ
Ñ» SÌ.
ÐÑли нÑжен еÑÑ Ð·Ð½Ð°Ñок над Ñой же бÑквой (или под ней) â без пÑоблем. ÐÑоÑÑо добавлÑем ÑооÑвеÑÑÑвÑÑÑий Ñимвол.
РпÑимеÑÑ, еÑли добавиÑÑ Ñимвол «ÑоÑка ÑнизÑ» (код \u0323), Ñо бÑÐ´ÐµÑ Â«S Ñ Ð´Ð²ÑÐ¼Ñ ÑоÑками ÑвеÑÑ
Ñ Ð¸ ÑнизÑ» SÌÌ£ .
ÐÑÐ¸Ð¼ÐµÑ ÑÑого Ñимвола в JavaScript-ÑÑÑоке:
alert("S\u0307\u0323"); // SÌÌ£
Ð¢Ð°ÐºÐ°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿ÑоизволÑной бÑкве нÑжнÑе знаÑки, Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑоÑонÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°, а Ñ Ð´ÑÑгой ÑÑоÑÐ¾Ð½Ñ â Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ñоблемка: можно пÑедÑÑавиÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð·ÑалÑного оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ инÑеÑпÑеÑаÑии Ñимвол â ÑазнÑми ÑоÑеÑаниÑми Unicode-кодов.
ÐÐ¾Ñ Ð¿ÑимеÑ:
alert("S\u0307\u0323"); // SÌÌ£
alert("S\u0323\u0307"); // SÌÌ£
alert( "S\u0307\u0323" == "S\u0323\u0307" ); // false
РпеÑвой ÑÑÑоке поÑле оÑÐ½Ð¾Ð²Ñ S идÑÑ ÑнаÑала знаÑок «веÑÑ
нÑÑ ÑоÑка», а поÑом â нижнÑÑ, во вÑоÑой â наобоÑоÑ. Ðо кодам ÑÑÑоки не ÑÐ°Ð²Ð½Ñ Ð´ÑÑг дÑÑгÑ. Ðо Ñимвол задаÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ.
С ÑелÑÑ ÑазÑеÑиÑÑ ÑÑÑ ÑиÑÑаÑиÑ, ÑÑÑеÑÑвÑÐµÑ Ð®Ð½Ð¸ÐºÐ¾Ð´Ð½Ð°Ñ Ð½Ð¾ÑмализаÑиÑ, пÑи коÑоÑой ÑÑÑоки пÑиводÑÑÑÑ Ðº единомÑ, «ноÑмалÑномÑ», видÑ.
Ð ÑовÑеменном JavaScript ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¼ÐµÑод str.normalize().
alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
Ðабавно, ÑÑо в данной конкÑеÑной ÑиÑÑаÑии normalize() пÑиведÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð¸Ð· ÑÑÑÑ
Ñимволов к одномÑ: \u1e68 (S Ñ Ð´Ð²ÑÐ¼Ñ ÑоÑками).
alert( "S\u0307\u0323".normalize().length ); // 1, ноÑмализовало в один Ñимвол
alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
ÐÑо, конеÑно, не вÑегда Ñак, пÑоÑÑо в данном ÑлÑÑае оказалоÑÑ, ÑÑо именно Ñакой Ñимвол в Юникоде Ñже еÑÑÑ. ÐÑли добавиÑÑ Ð·Ð½Ð°Ñков, Ñо ноÑмализаÑÐ¸Ñ Ñже даÑÑ Ð½ÐµÑколÑко Ñимволов.
ÐÐ»Ñ Ð±Ð¾Ð»ÑÑинÑÑва пÑакÑиÑеÑÐºÐ¸Ñ Ð·Ð°Ð´Ð°Ñ Ð¸Ð½ÑоÑмаÑии, данной вÑÑе, должно бÑÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ доÑÑаÑоÑно, но еÑли Ñ Ð¾ÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобно ознакомиÑÑÑÑ Ñ Ð²Ð°ÑианÑами и пÑавилами ноÑмализаÑии â они опиÑÐ°Ð½Ñ Ð² пÑиложении к ÑÑандаÑÑÑ Ð®Ð½Ð¸ÐºÐ¾Ð´ Unicode Normalization Forms.
ÐолезнÑе меÑодÑ
Ðобавлен ÑÑд полезнÑÑ Ð¼ÐµÑодов обÑего назнаÑениÑ:
- str.includes(s) â пÑовеÑÑеÑ, вклÑÑÐ°ÐµÑ Ð»Ð¸ одна ÑÑÑока в ÑÐµÐ±Ñ Ð´ÑÑгÑÑ, возвÑаÑаеÑ
true/false. - str.endsWith(s) â возвÑаÑаеÑ
true, еÑли ÑÑÑокаstrзаканÑиваеÑÑÑ Ð¿Ð¾Ð´ÑÑÑокойs. - str.startsWith(s) â возвÑаÑаеÑ
true, еÑли ÑÑÑокаstrнаÑинаеÑÑÑ Ñо ÑÑÑокиs. - str.repeat(times) â повÑоÑÑÐµÑ ÑÑÑокÑ
strtimesÑаз.
ÐонеÑно, вÑÑ ÑÑо можно бÑло ÑделаÑÑ Ð¿Ñи помоÑи дÑÑÐ³Ð¸Ñ Ð²ÑÑÑоеннÑÑ Ð¼ÐµÑодов, но новÑе меÑÐ¾Ð´Ñ Ð±Ð¾Ð»ÐµÐµ ÑдобнÑ.
ÐÑого
УлÑÑÑениÑ:
- СÑÑоки-ÑÐ°Ð±Ð»Ð¾Ð½Ñ â Ð´Ð»Ñ Ñдобного Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑÑÑок (многоÑÑÑоÑнÑÑ , Ñ Ð¿ÐµÑеменнÑми), плÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ ÑаблонизаÑии Ð´Ð»Ñ ÑамоÑÑоÑÑелÑного ÑоÑмаÑиÑованиÑ.
- Юникод â ÑлÑÑÑена ÑабоÑа Ñ ÑÑÑÑогаÑнÑми паÑами.
- ÐолезнÑе меÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¿ÑовеÑок Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки в дÑÑгÑÑ.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)