萌えハッカーニュースリーダー

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

出典: https://waspdev.com/articles/2025-04-16/what-i-dislike-in-javascript
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

正解は…「仕様です!」…って、つまらないジョークだったかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search