JavaScript
arrow function で return Object
{ } が Block として解釈されるのでうまくいかず return を書きがちだが、単にカッコでかこめば Object になる
NG: (k, v) => { k: v }
OK: (k, v) => ({ k: v })
template literal のエスケープ
backquote を \ でエスケープ
$ または $ と { の間をエスケープ
code:quote-template.js
\`\${}\` === "${}" #=> 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 コードポイント
code:escape.js
"姉いない😭".replace(
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 にも使えるし書きやすいのでは