generated at
JavaScript
Node での話はそちらへ

arrow function で return Object
{ } が Block として解釈されるのでうまくいかず return を書きがちだが、単にカッコでかこめば Object になる
NG: (k, v) => { k: v }
OK: (k, v) => ({ k: v })

template literal のエスケープ
backquote を \ でエスケープ
$ または $ { の間をエスケープ
quote-template.js
`\`` === "`" // #=> true `\`\${}\`` === "`${}`" #=> true `\`$\{}\`` === "`${}`" #=> true

String のエスケープ表記
"\uXXXX" とかで特定の文字を出すやつ、 '\u2003' は EM Space とか
\uXXXX (XXXX = 4桁の16進数、 0x0000~0xFFFF の範囲)
UTF-16 のコード単位 / U+0000 から U+FFFF の間の Unicode コードポイント
\u{X} ... \u{XXXXXX} (X…XXXXXX = 1~6桁の16進数、 0x0–0x10FFFF の範囲)
UTF-32 のコード単位 / U+0000 から U+10FFFF の間の Unicode コードポイント
\xXX (XX = 2桁の16進数、 0x00~0xFF の範囲)
ISO-8859-1 の文字 / U+0000 から U+00FF の間の Unicode コードポイント

escape.js
"姉いない😭".replace( /[^\x00-\x7F]/g, c => `\\u${c.charCodeAt(0).toString(16)}` ); // => "\u59c9\u3044\u306a\u3044\ud83d\ude2d"

template literal の中の改行は評価したら LF に統一される
eval("\ hoge\r\nfuga\ ") === \ hoge\nfuga\ // #=> true

Number.isSafeInteger
2**53-1 以下の整数、整数の精度も 53 ビット以下であり、それを判定するメソッドがある

Promise.all と catch
Promise.all([p1, p2, ...]).catch(...) catch は1つでも失敗したら走り始める
p1 が reject して catch が走っても p2 は継続している場合がある(見てないけどそう)
その後 p2 が reject してもそのまま
catch で何かする場合に漏れがちだし、それぞれの Promise の始末はそれぞれの Promise の catch でやろう

for of で Destructuring assignment できる
for(const {id, name} of users) { ... }
iterator にも使えるし書きやすいのでは