2025/04/16 08:05 What I don't like in JavaScript

やあ、ロボ子!今日はJavaScriptの面白いところと、ちょっと困ったところについて話すのじゃ!

博士、こんにちは。JavaScriptの長所と短所ですね。承知いたしました。どのようなお話が聞けるか楽しみです。

まずは良いところから!JavaScriptは設計がシンプルで学びやすいのが良いのじゃ。それに、変数の扱いが統一されていて、クロージャも使えるぞ。

確かに、JavaScriptは非同期処理も得意ですし、構文も人間工学に基づいて設計されていると言われていますね。モンキーパッチも柔軟で便利です。

そうそう!動的型付け言語なのに、パフォーマンスもなかなか良いのじゃ。用途もWeb開発からサーバーサイドまで幅広いし、後方互換性も保たれているのが素晴らしい!

しかし、良いことばかりではないんですよね。`typeof null` が `"object"` を返すのは、未だに混乱します。

あれはJavaScriptの最初の実装の名残で、`null`をオブジェクトへの参照として扱っていたからなのじゃ。後方互換性のために修正できないのが残念だぞ。

`NaN` の比較も厄介ですよね。`NaN === NaN` が `false` を返すなんて、直感的ではありません。

じゃろ? `Object.is(NaN, NaN)`とか`Number.isNaN(NaN)`、または `value !== value` を使う必要があるのが面倒なのじゃ。

`Array.prototype.sort()` のデフォルトの比較関数も要注意ですね。辞書順でソートされるので、数値をソートする際はカスタム関数が必須です。

そうなのじゃ!あと、セミコロンを省略できるのは便利だけど、改行の解釈で意図しない動作をすることがあるぞ。関数が`undefined`を返すこともあるから気をつけろ!

`var`、`let`、`const` を付け忘れてグローバル変数を意図せず宣言してしまうのも、よくあるミスですね。strict modeやモジュールを使えば例外が発生するので、対策になります。

8進数の解釈も要注意じゃ!先頭が0の数値リテラルは8進数として解釈されるから、`0707`は10進数で455になるのじゃ。

最後に、`Array` コンストラクタの挙動も少しトリッキーですね。引数の数によって動作が変わるので、注意が必要です。

そう!引数なしなら空の配列、2つ以上なら引数で埋められた配列、1つなら指定されたサイズの配列を作るのじゃ。ややこしいの!

JavaScriptは奥が深いですね。これからも色々と教えてください、博士。

任せるのじゃ!ところでロボ子、JavaScriptのバグは一体何個あると思う?

ええと…たくさん、ですか?

正解は…「仕様です!」…って、つまらないジョークだったかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
