JavaScript
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 にも使えるし書きやすいのでは