ガジェット通信

見たことのないものを見に行こう

【選択式問題】JavaScript検定RPG Array編 問題解説 #javascript

DATE:
  • ガジェット通信を≫

今回の問題

今回の『JavaScript検定RPG』は『Array編』ということで、JavaScript のArrayについての問題が出題されました。

それでは以下、各問題とその解答を見ていきましょう。

問題1

配列を作る方法として適切でないのはどれ?

new Array(0, 1, 2)
[3, 4, 5]
Array{6, 7, 8}

JavaScriptでは、「new Array(要素, 要素, …)」あるいは「[要素, 要素, …]」といった方法で、配列を作ることができます。しかし、「Array{要素, 要素, …}」といった方法では、配列を作ることができません。

Array を new 演算子で初期化する際は、その引数が1つかつ0以上の整数値の場合は、引数は要素数になります。それ以外の場合は、配列の各要素になります。

そのため答えは、3番目の「Array{6, 7, 8}」になります。

// 参考コードと出力結果
console.log(“[” + new Array(0, 1, 2) + “]”); // [0,1,2]
console.log(“[” + new Array(“9”) + “]”); // [9]
console.log(“[” + new Array() + “]”); // []
console.log(“[” + new Array(4) + “]”); // [,,,]

console.log(“[” + [3, 4, 5] + “]”); // [3,4,5]

参考1:Array – JavaScript | MDN

問題2

配列の長さを得る方法はどれ?

[0, 1, 2].length
[3, 4, 5].length()
length([6, 7, 8])
Array.length([9, 0, 1])

JavaScriptでは、「配列.length」で配列の長さを得られます。

そのため答えは、1番目の「[0, 1, 2].length」になります。

// 参考コードと出力結果
console.log([0, 1, 2].length); // 3

参考1:Array – JavaScript | MDN

問題3

var a = [0, 1]; の時、a[2] の値は?

0
1
-1
undefined

JavaScriptでは、配列の要素の範囲外を参照しようとした際は「undefined」が戻ります。JavaScriptは、配列の要素の添え字を0から数えます。そのため、「a[2]」は要素の範囲外となります。

そのため答えは、4番目の「undefined」になります。

// 参考コードと出力結果
var a = [0, 1];
console.log(a[2]); // undefined

参考:Array – JavaScript | MDN

問題4

以下の式でエラーが出ないのはどれ?

new Array(-1)
new Array(Math.pow(2,-1))
new Array(2<<32)
new Array(Math.pow(2,32))

Array を new 演算子で初期化する際、引数が1つだけで、数値が設定された際は、その引数は要素数と見なされます。

その際、0 から 232-1 までの整数値の場合は、正しく配列が作られて、それ以外の数値の場合はエラーが起きます。

問題の引数のうち、上記の条件を満たすものは「2<<32」のみです。「2<<32」は 2 となり、条件に合致します。

(※「2<<29」は 1073741824、「2<<30」は -2147483648、「2<<31」は 0、「2<<32」は 2となります。詳しくは「参考コードと出力結果2」を参照)

「-1」は負の数です。「Math.pow(2,-1)」は 0.5 で浮動小数点数です。「Math.pow(2,32)」は、0 から 232-1 の範囲をオーバーします。

そのため答えは、3番目の「new Array(2<<32)」になります。

// 参考コードと出力結果1
try {
new Array(-1);
} catch(e) {
console.log(e); // Uncaught RangeError: Invalid array length
}

try {
new Array(Math.pow(2,-1));
// 「Math.pow(2,-1)」は「0.5」。
} catch(e) {
console.log(e); // Uncaught RangeError: Invalid array length
}

console.log(“[” + new Array(2<<32) + “]”); // [,]
// 「2<<32」は「2」。

try {
new Array(Math.pow(2,32));
// 「Math.pow(2,32)」は「4294967296」。
} catch(e) {
console.log(e); // Uncaught RangeError: Invalid array length
}

// 参考コードと出力結果2
var arr = [];
for (var i = 0; i < 34; i ++) { arr.push([i, "2 << " + i, 2 << i, (2 << i).toString(2)]); } console.table(arr); /* 0 "2 << 0" 2 "10" 1 "2 << 1" 4 "100" 2 "2 << 2" 8 "1000" 3 "2 << 3" 16 "10000" 4 "2 << 4" 32 "100000" 5 "2 << 5" 64 "1000000" 6 "2 << 6" 128 "10000000" 7 "2 << 7" 256 "100000000" 8 "2 << 8" 512 "1000000000" 9 "2 << 9" 1024 "10000000000" 10 "2 << 10" 2048 "100000000000" 11 "2 << 11" 4096 "1000000000000" 12 "2 << 12" 8192 "10000000000000" 13 "2 << 13" 16384 "100000000000000" 14 "2 << 14" 32768 "1000000000000000" 15 "2 << 15" 65536 "10000000000000000" 16 "2 << 16" 131072 "100000000000000000" 17 "2 << 17" 262144 "1000000000000000000" 18 "2 << 18" 524288 "10000000000000000000" 19 "2 << 19" 1048576 "100000000000000000000" 20 "2 << 20" 2097152 "1000000000000000000000" 21 "2 << 21" 4194304 "10000000000000000000000" 22 "2 << 22" 8388608 "100000000000000000000000" 23 "2 << 23" 16777216 "1000000000000000000000000" 24 "2 << 24" 33554432 "10000000000000000000000000" 25 "2 << 25" 67108864 "100000000000000000000000000" 26 "2 << 26" 134217728 "1000000000000000000000000000" 27 "2 << 27" 268435456 "10000000000000000000000000000" 28 "2 << 28" 536870912 "100000000000000000000000000000" 29 "2 << 29" 1073741824 "1000000000000000000000000000000" 30 "2 << 30" -2147483648 "-10000000000000000000000000000000" 31 "2 << 31" 0 "0" 32 "2 << 32" 2 "10" 33 "2 << 33" 4 "100" */ 参考:Array – JavaScript | MDN

参考:ビット演算子 – JavaScript | MDN

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。