JavaScript
このタグの記事11件。

Pagefindのfiltersに空文字を渡すと0件になる
- 実装ノート
- Pagefind
- JavaScript
絞り込みなしを空文字で表すと、検索結果が全部消える。pagefind 1.5.2で渡し方を4通り試した結果と、data-pagefind-filterの置き場所、pf_fragmentを開いて索引を直接読む手順。

日本の祝日はデータなしで計算できる — 導けないのは3年分だけ
- 実装ノート
- JavaScript
- 日時
祝日法の規則をコードに写すと、年ごとの表を持たなくて済む。固定日・ハッピーマンデー・春分秋分の近似式・振替休日・国民の休日の重ね方と、近似式が2100年でずれる理由。

Intlの和暦は1年目を「元」で返す
- 実装ノート
- JavaScript
- 日時
改元日の表はIntlに任せられる。ただしformatToPartsのyearは1年目だけ「元」で返り、Number()に通すとNaNになる。明治より前の元号、逆変換の非対称さ、干支の剰余まで。

BPM 120だけまともに鳴るメトロノーム — 先読み予約と丸め誤差
- 実装ノート
- 音声
- JavaScript
拍の予約位置を時刻で持ったら、同じ拍を5回予約していた。BPM 120では起きず、startTime 0のテストも素通りする。先読みスケジューリングの組み方と、丸め誤差が整数に落ちるところで牙をむく話。

剰余バイアスでAからHだけが1.2倍出る
- 実装ノート
- JavaScript
- アルゴリズム
乱数を文字プールの長さで割った余りで文字を選ぶと、先頭の8文字だけ多く出る。1バイトで2000万回引くと1.21倍、32bitでは4.85e+18回引かないと見えない。端を捨てて引き直す実装が要る理由。

URL APIは読んで書き戻すと別物になる
- 実装ノート
- JavaScript
- Web API
パースして構成要素に分け、そのまま組み立て直すと元に戻らない。ASCII 128文字を往復させて意味が変わったのは6文字。%2Fが/に化ける、値なしキーに=が生える、punycodeは片道。

家族の絵文字は11文字 — JavaScriptの文字数、4つの数え方
- 実装ノート
- JavaScript
- Unicode
👨👩👧👦をJavaScriptで数えると1・7・11・25の4つの答えが出る。UTF-8バイト・コードポイント・UTF-16コードユニット・書記素クラスタの違いと、MySQLのVARCHARやXの上限がどれで効くのか。

全角半角変換にNFKCを使うと①が1になり㍑がリットルになる
- 実装ノート
- JavaScript
- Unicode
NFKCは幅の変換器ではない。書き換える4965個のコードポイントのうち、幅に関係するのは158個だけだった。対象を絞った変換表とオフセットで書き直した実装と、表のずれを拾う網羅テスト。
暴走した正規表現はterminateでしか止まらない
- 実装ノート
- 正規表現
- JavaScript
入力欄の正規表現は書きかけの段階で戻り読みが爆発し、タブごと固まる。しかも実行はJavaScriptから中断できない。Workerに追い出して使い捨てにする設計と、途中で踏んだ正規表現APIの穴。

紀元前501年が501になる — DateとIntlで踏んだ5つの罠
- 実装ノート
- JavaScript
- 日時
Unixtime変換ツールで踏んだDateとIntl.DateTimeFormatの罠を5つ。紀元前が正の数で返る、Date.UTC(26, 0, 1)が1926年になる、夏時間で暦の妥当性検査が壊れる。