[ペチパーの大冒険] ゲーム制作#05「あるあるミス・クイズ2」

2025/01/19

ゲーム 開発

t f B! P L
eyecatch Javascriptプログラミングの間違えやすいポイントクイズの2回目です。 今回も、10問用意してみたので、クイズに答えてみて勘違いポイントなどあれば、学習してみましょう。

Q11. ==と===の違い

次のコードの出力は何ですか? console.log(1 == "1"); console.log(1 === "1"); 選択肢(クリックしてください)

答え:

B. trueとfalse

解説:

==は型を自動変換して比較するため、1と"1"は等しいと評価されます。 ===は型を変換せず比較するため、型が異なる場合はfalseになります。

Q12. オブジェクトのプロパティ参照

次のコードの出力は何ですか? const obj = { key: "value" }; console.log(obj.key); console.log(obj["key"]); console.log(obj.keyName); 選択肢(クリックしてください)

答え:

A. "value", "value", undefined

解説:

obj.keyとobj["key"]は同じ結果を返します。 存在しないプロパティobj.keyNameを参照すると、undefinedが返されます。エラーにはなりません。

Q13. 配列のpushと代入の違い

次のコードの出力は何ですか? let arr = []; arr[0] = 1; arr[2] = 3; console.log(arr); arr.push(5); console.log(arr); 選択肢(クリックしてください)

答え:

C. [1, undefined, 3]と[1, undefined, 3, 5]

解説:

arr[2] = 3では、インデックス1にundefinedが自動的に割り当てられます。 pushは末尾に値を追加するため、既存の配列に影響を与えません。

Q14. 関数の引数の省略

次のコードを実行するとどうなりますか? function greet(name) { console.log("Hello, " + name); } greet(); 選択肢(クリックしてください)

答え:

B. "Hello, undefined"

解説:

関数に引数を渡さない場合、その値はデフォルトでundefinedになります。 文字列結合で"undefined"が表示されます。

Q15. nullとundefinedの違い

次のコードの出力は何ですか? let a = null; let b; console.log(a == b); console.log(a === b); 選択肢(クリックしてください)

答え:

A. trueとfalse

解説:

==ではnullとundefinedは等しいとみなされます。 ===では型も比較するため、異なる型(nullとundefined)は等しくありません。

Q16. スプレッド演算子の誤用

次のコードを実行するとどうなりますか? let arr = [1, 2, 3]; let newArr = [...arr, 4, ...arr]; console.log(newArr); 選択肢(クリックしてください)

答え:

A. [1, 2, 3, 4, 1, 2, 3]

解説:

スプレッド演算子...は配列を展開します。 [...arr, 4, ...arr]はarrを2回展開し、間に4を挿入した結果となります。

Q17. 関数のデフォルト値

次のコードの出力は何ですか? function add(a = 1, b = 2) { return a + b; } console.log(add(5)); 選択肢(クリックしてください)

答え:

C. 7

解説:

add(5)を呼び出した場合、aに5が渡され、bはデフォルト値2が使用されます。 計算は5 + 2 = 7となります。

Q18. クロージャの使い方

次のコードを実行するとどうなりますか? function makeCounter() { let count = 0; return function () { count++; console.log(count); }; } let counter1 = makeCounter(); counter1(); counter1(); let counter2 = makeCounter(); counter2(); 選択肢(クリックしてください)

答え:

B. 1, 2, 1

解説:

makeCounterを呼び出すたびに、新しいクロージャが作られます。 counter1とcounter2は独立したcountを持つため、それぞれ初期化されます。

Q19. プリミティブとオブジェクトの違い

次のコードの出力は何ですか? let a = 10; let b = a; b = 20; console.log(a); let obj1 = { value: 10 }; let obj2 = obj1; obj2.value = 20; console.log(obj1.value); 選択肢(クリックしてください)

答え:

C. 10と20

解説:

プリミティブ型(例: 数値)は値渡しのため、bを変更してもaには影響しません。 オブジェクト型(例: 配列やオブジェクト)は参照渡しのため、obj2を変更するとobj1も影響を受けます。

Q20. typeofの挙動

次のコードの出力は何ですか? console.log(typeof null); console.log(typeof undefined); 選択肢(クリックしてください)

答え:

B. "object"と"undefined"

解説:

typeof nullはJavaScriptの初期設計ミスにより"object"と返されます(仕様上のバグ)。 typeof undefinedは正しく"undefined"を返します。

あとがき

ひっかけ問題もありますが、Javascriptのプログラミングをする際によくやっちまうミスばかりなので、 解説も含めて覚えておきましょう。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ