JavaScript | データ型

javascrpit JavaScript
スポンサーリンク

JavaScript 型バグ練習帳 — 応用編(全10問)

各問題には:

  • ❓ コード例
  • 💡 ヒント
  • ✅ 正解と詳しい解説

第1問:暗黙の文字列化

console.log([1, 2] + [3, 4]);
JavaScript

💡 ヒント:
+ は数値だけでなく文字列連結にも使われます。

答え:

"1,23,4"

📘 解説:
配列は toString() により "1,2""3,4" と文字列化され、連結されます。
数値演算したい場合は [1,2].concat([3,4])reduce() を使いましょう。

第2問:parseInt の第2引数を忘れる

console.log(parseInt("08"));
JavaScript

💡 ヒント:
古い仕様では、先頭ゼロが「8進数」とみなされることがありました。

答え:

8

📘 解説:
ES5以降では自動8進数解釈は廃止されましたが、
安全のために常に基数(radix)を指定するのがベスト:

parseInt("08", 10);
JavaScript

第3問:数値と文字列の比較

console.log(5 < "10");
JavaScript

💡 ヒント:
比較演算子は、型変換を行うときがあります。

答え:

true

📘 解説:
"10" は数値に変換され 5 < 10 と評価されます。
ただし "2" < "10"false(文字列比較)になるため要注意。

第4問:typeof NaN

console.log(typeof NaN);
JavaScript

💡 ヒント:
NaN は “Not a Number” なのに…?

答え:

"number"

📘 解説:
NaN は数値型の一種(Number型の特殊値)です。
Number.isNaN() で安全に判定できます。

第5問:配列の穴

const arr = [1, , 3];
console.log(arr.length, arr[1]);
JavaScript

💡 ヒント:
「スパース配列」と呼ばれる構造です。

答え:

3 undefined

📘 解説:
空要素は存在しないインデックス扱い(undefinedとは別)。
forEach などはスキップするので、
配列を操作するときは mapArray.from を使うと安全。

第6問:== と === の入れ子

console.log(null == undefined);
console.log(null === undefined);
JavaScript

✅ 答え:

true
false

📘 解説:
== は null と undefined を「同値」と扱う特例があります。
厳密に区別するには === を使いましょう。

第7問:isNaN の落とし穴

console.log(isNaN("hello"));
JavaScript

💡 ヒント:
isNaN は暗黙に数値変換を行います。

答え:

true

📘 解説:
"hello"NaN になるため true。
型安全に判定したい場合は Number.isNaN() を使うべきです。

第8問:BigIntとMath

console.log(Math.max(10n, 20n));
JavaScript

✅ 答え:

TypeError

📘 解説:
Math 関数は BigInt に対応していません。
BigInt同士の比較は 10n > 20n のように行う必要があります。

第9問:JSON.stringify 循環参照

const obj = {};
obj.self = obj;
JSON.stringify(obj);
JavaScript

💡 ヒント:
JSON.stringifyは「ツリー構造」でないと処理できません。

答え:

TypeError: Converting circular structure to JSON

📘 解説:
オブジェクトが自分自身を参照しているため循環構造。
安全に文字列化するには structuredClone()flatted ライブラリを使用します。

第10問:Symbolの比較

console.log(Symbol("x") === Symbol("x"));
JavaScript

💡 ヒント:
同じ説明文字列でも別のシンボル?

答え:

false

📘 解説:
Symbol() は一意な識別子を作成します。
共有したい場合は Symbol.for("x") を使います(グローバルレジストリ登録)。


まとめ表

問題型バグテーマ注意点
1暗黙の文字列化+演算子の型変換
2parseInt基数常に第2引数を指定
3比較の型変換"2" < "10"に注意
4NaNの型typeofは”number”
5スパース配列undefinedと異なる
6null vs undefined==の特例
7isNaNの誤用Number.isNaNを使用
8BigIntとMath非対応、比較演算使用
9JSON循環構造stringifyできない
10Symbolの同一性Symbol.forで共有
JavaScript | MDN
JavaScript (JS) は軽量でインタープリター型(あるいは実行時コンパイルされる)第一級関数を備えたプログラミング言語です。ウェブページでよく使用されるスクリプト言語として知られ、多くのブラ...
タイトルとURLをコピーしました