ブックマーク / nmi.jp (3)

  • JavaScript の undefined と null を完全に理解する

    JavaScript で頻出する undefined と null について語ります。 言語仕様上の違い JavaScript (ECMAScript) において、仕様上 undefined と null は当然ながら明確に区別されています。いくつか言語仕様上の扱いについて挙げてみます。 比較 厳密な比較演算子 === において undefined と null は区別されます。ゆるい比較演算子 == においては両者は区別されません(仕様 7.2.14)。 console.log(undefined === null); // false console.log(undefined == null); // true 他の falsy な値(false とみなされる値)との比較は、ゆるい比較演算子であっても区別されます(仕様 同上)。 console.log(undefined == fa

  • YouTube チャンネル「ニコニコプログラミング」を開設しました

    Twitter では告知しましたが、ちょうど 1 ヶ月前の 7 月 1 日に、YouTube チャンネル「ニコニコプログラミング」を開設しました。まさかの YouTuber デビューです。 Description のところにも書いているように プログラミングの楽しさを伝えるために、プログラミングにまつわる様々なことをしています。短い時間でプログラミングの実況をしながらゲームを作り上げる実況プログラミングシリーズをメインに展開していきます。 というチャンネルです。 2009年「テトリスを1時間強で作ってみた」を発表 私は昔から、気まぐれに動画投稿をしております。例えば YouTube に「Prince of Persia(PC9801) within 10 minutes」という RTA 作品(ゲームクリアのタイムアタック、この作品はエミュレータですが)を上げて 53 万再生されていたり、ニ

  • 正規表現の脆弱性 (ReDoS) を JavaScript で学ぶ

    先日、このようなツイートを書いたところ、かなりの反響がありました。 JavaScript の正規表現の脆弱性の例でいうと、例えば /\s+$/ は脆弱性があると言える console.time(); /\s+$/.test(" ".repeat(65536) + "a"); console.timeEnd(); 結構時間がかかるのがわかる。でも /\s+$/ を見て「これは危険だな」と理解出来る人はそんなにいない。JavaScript に限らないけれど。 — Takuo Kihira (@tkihira) February 17, 2022 これは一般に ReDoS (Regular expression Denial of Service) と呼ばれる脆弱性です。正確に理解するのが難しい脆弱性なので、少し解説してみたいと思います。 結論 長い記事になるので、最初に「とりあえずこれだけ知っ

  • 1