本文へ移動
myowchick

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年になる、夏時間で暦の妥当性検査が壊れる。

← タグの一覧へ