ES 2018新特徴その:非エスケープシーケンスのテンプレート文字列
4761 ワード
ES 2018新機能 ひどうき反復器 正規表現の逆方向(lookbehind)断言 正規表現Unicodeエスケープ 非エスケープシーケンスのテンプレート文字列(本明細書) 正規表現s/dotAllモード 正規表現名取得グループ オブジェクト展開演算子 Promise.prototype.finally
このECMAScript提案「Template Literal Revision」はTim Disneyが担当しており、現在ステージ4に入っており、本提案はECMAScript 2018(ES 9)の一部である.この提案では,テンプレート文字列のラベル関数構文をより自由に使用する.
1.タグ関数Tagged templates
ラベルを使用すると、テンプレート文字列を関数で解析できます.ラベル関数の最初のパラメータには、文字列値の配列が含まれます.残りのパラメータは式に関連しています.最後に、関数は処理された文字列を返すことができます(または、全く異なるものを返すことができます).
2.
構文:
3.元の文字列
ラベル関数の最初のパラメータには、特殊な属性
4.タグ関数付きエスケープシーケンス
ES 2016以降、ラベル付きテンプレートの字面量は、以下のエスケープシーケンスのルールを遵守している. Unicode文字は「u」で始まる、例えば である. Unicode符号ビットは「u{}」で表され、例えば である. 16進数は「x」で始まる、例えば である. 8進数は「」と数字で始まる、例えば .
各ECMAScript構文について、解析器は有効なエスケープシーケンスを検索し、無効なエスケープシーケンスについて
5.ES 2018不正エスケープシーケンスの改訂について
ラベル関数付きテンプレート文字列は、一般的なエスケープシーケンスをサポートする言語(例えば、DSLs、LaTeX)をネストすることを可能にするべきである.
したがって、ECMAScript 2018規格は、ラベル付きテンプレート文字列におけるECMAScriptのエスケープシーケンスの構文制限を除去する.
6.実現 V8 - Chrome 62 SpiderMonkey - Firefox 53 JavaScriptCore-バージョン不明 ChakraCore-開発中 Babel - 7.x
7.関連リンク: https://github.com/tc39/propo... https://tc39.github.io/propos... https://developer.mozilla.org...
このECMAScript提案「Template Literal Revision」はTim Disneyが担当しており、現在ステージ4に入っており、本提案はECMAScript 2018(ES 9)の一部である.この提案では,テンプレート文字列のラベル関数構文をより自由に使用する.
1.タグ関数Tagged templates
ラベルを使用すると、テンプレート文字列を関数で解析できます.ラベル関数の最初のパラメータには、文字列値の配列が含まれます.残りのパラメータは式に関連しています.最後に、関数は処理された文字列を返すことができます(または、全く異なるものを返すことができます).
function foo(str) {
return str[0].toUpperCase();
}
foo`justjavac`; // JUSTJAVAC
foo`Xyz`; // XYZ
2.
String.raw()
String.raw()
はテンプレート文字列のラベル関数であり、Pythonの文字列接頭辞rおよびC#の文字列接頭辞@と同様に、テンプレート文字列の元の字面量値を取得するために使用される.構文:
String.raw(callSite, ...substitutions)
String.raw`templateString`
String.raw()
は、組み込まれている唯一のテンプレート文字列ラベル関数です.var str = String.raw`Hi
${2+3}!`;
// "Hi
5!"
str.length;
// 6
str.split('').join(',');
//
// :"H,i,\,n,5,!"
3.元の文字列
ラベル関数の最初のパラメータには、特殊な属性
raw
が存在し、特殊な文字の置換を経ずにテンプレート文字列の元の文字列にアクセスできます.function foo(str) {
console.log(str);
return str[0].toUpperCase();
}
foo`justjavac`;
//
["justjavac", raw: ["justjavac"]]
foo`just\\java\\c`;
//
["just\java\c", raw: ["just\\java\\c"]]
4.タグ関数付きエスケープシーケンス
ES 2016以降、ラベル付きテンプレートの字面量は、以下のエスケープシーケンスのルールを遵守している.
\u00A9
\u{2F804}
\xA9
\251
各ECMAScript構文について、解析器は有効なエスケープシーケンスを検索し、無効なエスケープシーケンスについて
SyntaxError
を直接放出します.String.raw`\`;
Uncaught SyntaxError: Unterminated template literal
5.ES 2018不正エスケープシーケンスの改訂について
ラベル関数付きテンプレート文字列は、一般的なエスケープシーケンスをサポートする言語(例えば、DSLs、LaTeX)をネストすることを可能にするべきである.
したがって、ECMAScript 2018規格は、ラベル付きテンプレート文字列におけるECMAScriptのエスケープシーケンスの構文制限を除去する.
function tag(strs) {
strs[0] === undefined
strs.raw[0] === "\\unicode and \\u{55}";
}
//
tag`\unicode and \u{55}`; // undefined
//
let bad = `bad escape sequence: \unicode`;
// throws early error:SyntaxError: Invalid Unicode escape sequence
6.実現
7.関連リンク: