Twitter hashtag: #esspec
便利ツール
時事ネタ
自己紹介 (近況報告)
syumai syumai.icon
書影が出ました
tars0x9752.icon sugoi
Software DesignでCloudflare Workersの連載を始めます
多分半年くらい
tars0x9752 (たーず / naoki aoyama) tars0x9752.icon
あつい
たしかにyebis0942.icon
iwatsurut
とくに、イベントもなく過ごしています。
adobe photoshop の Web 版に Lit というのが使われているらしいので少し見ています。
tars0x9752.icon photoshop の web 版があるのか...
yebis0942yebis0942.icon
おもしろYouTubeチャンネルです
Jekyll製でした
(自分は最近はNext.jsとかAstroとか使いがち)
前回のあらすじ
今回の範囲
String Literals
LegacyOctalEscapeSequence
code:js
"\0A"
'\x00A'
"\18A"
'\x018A'
"\19A"
'\x019A'
"\1A"
'\x01A'
"\07A"
'\x07A'
"\37A"
'\x1FA'
"\47A"
"'A"
"\77A"
'?A'
"\077A"
'?A'
"\377"
'ÿ'
0377 // 8bitの最大値
255
(() => { "use strict"; "\8"; })();
(() => { "use strict"; "\8"; })();
^
Uncaught SyntaxError: \8 and \9 are not allowed in strict mode.
(() => { "use strict"; "\05"; })();
(() => { "use strict"; "\05"; })();
^
Uncaught SyntaxError: Octal escape sequences are not allowed in strict mode.
最近まで\8などの扱いが未定義だった
IoT分野で使われる組み込みJavaScriptエンジン
Static Semantics: Early Errors
code:js
function invalid() { "\7"; "use strict"; }
Use Strict Directiveが前に遡って効く。
前に出てきた似たパターン
code:js
function yield() { "use strict"; }
code:js
const a = "\
\
a\
\
b\
\
";
console.log(a); // ab
console.log(a.length); // 0
const s = "
a
b
";
console.log(s);
console.log(s.length); // 5
const s2 = "\
a\
b\
";
console.log(s2);
console.log(s2.length); // 2
LineContinuation
空文字になる(\に続く改行文字は無視される)
改行っぽい文字の振る舞い
LineTerminator: <LF>, <CR>, <LS>, <PS>
文字列リテラル内に裸で出現できるものとできないものがある
<LF>, <CR>: できない
<LS>, <PS>: できる
しかし、\によるLineContinuationを適用するとすべて空文字になる
Static Semantics: SV
LegacyOctalEscapeSequenceについて
The SV of EscapeSequence :: LegacyOctalEscapeSequence is the String value consisting of the code unit whose numeric value is the MV of LegacyOctalEscapeSequence.
📝 LegacyOctalEscapeSequenceのMVと書いてあるが、例えば 377 は数値リテラルとしてはただの377になってしまう。
TemplateEscapeSequence
まだ定義されていない文法定義だった
Static Semantics: MV
Number LiteralのMVでカバーできていないものだけ定義されていそう
Regular Expression Literals
code:js
/a/ === /a/ // 常にfalse
Regular Expression Literalによって取り出された正規表現は、さらにECMAScript Regular Expression grammarによってパースされる
ECMAScript Regular Expression grammarは処理系が拡張してもよい
Syntax
but not one of * or \ or / or [
/* はコメントの開始なので除外されていそう
📝Template StringがLegacyOctalEscapeSequenceを許可しない根拠があまり明確でない?
実はここにあった
LegacyOctalEscapeSequenceに相当する文字列はNotEscapeSequenceにマッチし、Early ErrorsでこれをSyntax Errorとしている
\あとかもSyntax Errorにしてほしい気もするyebis0942.icon