一般社団法人 ITエンジニア育成検定協会
—
by
JavaScript技術試験 公式模試問題集
1 / 70
カテゴリー: JavaScript
次のコードの出力結果として正しいものを選択してください。
`let` はブロックスコープのため外側の `a` は 1 のままですが、`var` はブロックスコープを持たないためブロック内の再代入が外側にも反映されます。したがって `console.log(a, b)` は `1 3` を出力します。
2 / 70
`var a` は巻き上げ(宣言のホイスティング)により `undefined` として参照可能ですが、`let b` は宣言前の「一時的デッドゾーン(TDZ)」にあるため、`typeof b` であっても参照時に `ReferenceError` となり実行時エラーになります。
3 / 70
テンプレートリテラル内の `${…}` では式が評価されます。`n * 2` は `6` なので、`”値は6です”` が出力されます。
4 / 70
テンプレートリテラルは `${}` 内で式を評価した結果を埋め込みます。`a + b` は `9` のため、`”5+4=9″` が出力されます。
5 / 70
`user` が `null` のためオプショナルチェーン `user?.name` は `undefined` を返し、`??`(null 合体)により右辺 `”guest”` が選択されます。
6 / 70
`??=` は左辺が `null` または `undefined` のときのみ代入します。`x` は `5`、`y` は `10` となり、`”5 10″` が出力されます。
7 / 70
乗算は加算よりも優先されます。左は `2 + (3 * 4) = 14`、右は `(2 + 3) * 4 = 20` です。
8 / 70
剰余 `7 % 4` は `3`、累乗 `2 ** 3` は `8` で、`+ 1` により `9` となります。
9 / 70
JavaScript の歴史的仕様により、`typeof null` は `”object”` を返します。未定義値 `undefined` は `”undefined”` です。
10 / 70
配列の `typeof` は `”object”`、関数の `typeof` は `”function”` を返します。
11 / 70
JavaScript の文字列リテラルはプリミティブ型であり `typeof “abc”` は `”string”` です。一方 `new String(“abc”)` はオブジェクト生成であり `typeof` は `”object”` を返します。
12 / 70
`==` は必要に応じて型変換を行うため、`new String(“abc”)` はプリミティブに変換され `”abc”` と等価です。一方 `===` は型まで厳密に比較するため、プリミティブとオブジェクトは等しくありません。
13 / 70
`push` で `[1,2,3,4]`、`splice(1,1)` でインデックス1の要素(2)を削除して `[1,3,4]`、`slice(0,2)` は先頭2要素を取り出すため `[1,3]` が出力されます。
14 / 70
`pop` で末尾の 40 を削除、`splice(1,1,25)` でインデックス1の要素を 25 に置換した結果 `[10,25,30]`。`slice(1)` は `[25,30]` を返します。
15 / 70
`map` で `[2,4,6]` に変換し、`filter(x>3)` で `4` と `6` が残るため、`[4,6]` が出力されます。
16 / 70
`filter` で偶数 `[2,4]` を取り出し、`map(x=>x*x)` で各要素を2乗して `[4,16]` が出力されます。
17 / 70
`sort` で昇順に `[1,2,3]`、`reduce` で和は `6`、`find(x>4)` は最初に一致する `5` を返します。
18 / 70
`sort((a,b)=>b-a)` で降順 `[2,1]`、`reduce(*, 初期値1)` で積は `6`、`find(x>5)` は見つからず `undefined` を返します。
19 / 70
オブジェクトのプロパティはドット記法とブラケット記法のどちらでもアクセスできます。`o.x` は 1、`o[“y”]` は 2 を参照します。
20 / 70
プロパティ名にハイフンなどの記号が含まれる場合はブラケット記法でアクセスします。一方 `a_b` は有効な識別子のためドット記法でアクセス可能です。
21 / 70
`JSON.stringify` でシリアライズし、`JSON.parse` でオブジェクトに戻しています。`o.a` は 1、キーは `a,b` の2つあるため `2` が出力されます。
22 / 70
文字列からパースした配列に `4` を追加し、`join(“,”)` でカンマ区切りの文字列として出力するため、`”1,2,3,4″` となります。
23 / 70
オブジェクトの列挙順は挿入順が基本です。`Object.keys(o)` は `[“x”,”y”]` を返し、`join(“,”)` により `”x,y”` が出力されます。
24 / 70
`Object.keys(o)` は列挙可能な自前プロパティキーを配列で返します。`{a,b}` の2つで長さは `2`、`”a”` を含むため `true` です。
25 / 70
`constructor` で受け取った `name` をインスタンスに代入しています。`new Person(“Alice”).name` は `”Alice”` を参照します。
26 / 70
デフォルト引数により `y` は省略時に `0`。`new Point(2)` は `x=2, y=0` で、`”2 0″` が出力されます。
27 / 70
`super.m()` は親クラス `A` の `m` を呼び `”A”` を返します。`”B”` を連結して `”AB”` になります。
28 / 70
サブクラス `B` の `greet` は `super.greet()` の結果に `” World”` を連結するため、`”Hello World”` が出力されます。
29 / 70
`”x” in f` はプロトタイプ連鎖上のプロパティも検出します。`__proto__` はインスタンスの内部プロトタイプ参照で、`F.prototype.x` は `1` です。
30 / 70
`hasOwnProperty` は自身の(直下の)プロパティのみ判定します。`y` はプロトタイプにあるため `false`、`in` 演算子は連鎖を辿るため `true` です。
31 / 70
セッター `n` で `_n` に代入し、ゲッター `n` で `_n` を返しています。代入後の値 `3` が出力されます。
32 / 70
セッター `m` はメートルをセンチメートルに変換して `_cm` に保持し、ゲッター `m` は `_cm/100` を返します。`1.5` を設定しているため `1.5` が出力されます。
33 / 70
スプレッド構文で `a` のプロパティを展開しつつ `y:2` を追加しています。`b` は `{x:1,y:2}` となり、`”1 2″` を出力します。
34 / 70
`Object.assign({}, a, b)` は新しいオブジェクトにプロパティをコピーします。`c` には `x` と `y` があり、元の `a` は `y` を持たないため `a.y` は `undefined` です。
35 / 70
関数宣言 `f` と関数式 `g` はどちらも関数です。`f(1)` は `2`、`g(1)` は `3` を返すため、`”2 3″` が出力されます。
36 / 70
関数宣言は巻き上げ(ホイスティング)により定義前でも呼び出せます。一方、関数式 `k` は代入後に呼び出せます。よって上から `”A”`、`”B”` と出力されます。
37 / 70
本問題は strict モードで評価します(IIFE 先頭の `’use strict’`)。通常の関数 `f` の `this` はレシーバ `obj` を指し `1` を返します。一方、アロー関数 `g` はレキシカルな `this`(ここでは `undefined`)を返すため、`typeof obj.g()` は `”undefined”` になります。
38 / 70
`obj.f()` は `this` が `obj` を指し `2` を返します。`obj.g()` はアロー関数のためレキシカルな `this` を返し、その型は `”object”` になります。
39 / 70
返された関数は外側の `n` をクロージャとして捕捉します。呼び出すたびに `n` がインクリメントされるため、最初は `1`、次は `2` が出力されます。
40 / 70
`a` と `b` は別々のクロージャを持つため、それぞれ独立にカウントされます。最初の呼び出しは両方とも `1` になります。
41 / 70
`call` と `apply` は呼び出し時に `this` を指定します。`bind` は新しい関数を返し、`this` が束縛された状態で実行できます。いずれも `o.x` を参照するため `42` になります。
42 / 70
`bind(o, 2)` は `this` と第1引数に `2` を固定した関数を返します。残りの引数に `3` を渡すため、`1 + 2 + 3 = 6` が出力されます。
43 / 70
デフォルト引数 `a=0` と残余引数 `…rest` を用いています。`1 + 2 + 3 = 6` となります。
44 / 70
第1引数は `undefined` のため既定値 `a=1` が使われ、`b=3`、残余引数 `r` は2個(`4,5`)で長さは `2`。合計は `1 + 3 + 2 = 6` です。
45 / 70
オブジェクトの分割代入で既定値を指定しています。`x` は省略時に `1`、`y` は渡された `5` で、合計 `6` になります。
46 / 70
配列の分割代入で既定値を用いています。第1要素のみ `3` が与えられ、第2要素は既定値 `2` が使われるため、`3 * 2 = 6` が出力されます。
47 / 70
`n` は `-1` で `n > 0` は偽のため、`else` 節が実行され `”minus”` が出力されます。
48 / 70
条件演算子 `cond ? x : y` は `cond` が真なら `x`、偽なら `y` を返します。`a > b` は真(`5 > 3`)なので `”A”` が出力されます。
49 / 70
`i` は `0,1,2` と変化し、その和は `0+1+2=3` です。
50 / 70
`i` が `0,1,2` の3回ループし、そのたびに `c` をインクリメントするため `3` が出力されます。
51 / 70
`for…of` は配列の値を列挙し、`for…in` はオブジェクトのキーを列挙します。`a[0]` は `”x”`、`o.k` は `”v”` です。
52 / 70
`for…in` は配列のインデックス(キー)を列挙します。キーは文字列として扱われるため、最後に代入されるキーは `”1″` で、そのまま `”1″` が出力されます。
53 / 70
不正な JSON は `JSON.parse` で例外となり `catch` が実行され `”err”` を出力します。`finally` は常に実行されるため、その後に `”done”` が出力されます。
54 / 70
有効な JSON は例外を投げないため `catch` は実行されません。`try` 本体の `”ok”` と、必ず実行される `finally` の `”fin”` が順に出力されます。
55 / 70
`d` は `2` のため `case 1` に一致せず、`default` が実行され `”B”` が出力されます。
56 / 70
`case 1` に一致し、`break` により `switch` を抜けるため `”one”` のみが出力されます。
57 / 70
`i===2` のとき `continue` でスキップされ、`i===4` で `break` によりループを終了します。`out` に追加されるのは `0,1,3` です。
58 / 70
`i=0, j=0` のときに `count++` が1回実行され、次の `j=1` でラベル付き `break outer` により二重ループを抜けます。したがって `1` が出力されます。
59 / 70
スプレッド構文で `a` の前に `0` を追加しているため、`b.length` は 4、元の `a.length` は 3 のままです。
60 / 70
配列 `a` をスプレッドして末尾に `4` を追加したため、新しい配列 `c` の長さは 4 です。
61 / 70
`await` で解決値 `40` を受け取り、`+ 2` して `42` を出力します。
62 / 70
2つの Promise を個別に `await` し、和を出力しています。`10 + 32 = 42` です。
63 / 70
`Promise.all` は配列で解決し、要素の和 `1+2=3` を出力します。
64 / 70
`Promise.resolve(“B”)` は即座に解決するため、`race` の勝者は `”B”` です。
65 / 70
文字列はイテラブルです。イテレーターから順に `”a”`, `”b”` が取り出されます。
66 / 70
`Set` は重複を保持しません。`[1,2,3]` 相当となり、長さは `3` です。
67 / 70
`Promise.then` はマイクロタスク、`setTimeout` はマクロタスクです。同期の `1`、マイクロタスクの `3`、最後にマクロタスクの `2` の順に実行されます。
68 / 70
同期ログ `”A”` の後、マイクロタスクの `”B”`, `”C”` が順に実行され、最後にタイマー `”D”` が実行されます。
69 / 70
ジェネレーター `g` を `for…of` で反復すると `1`、次に `2` が取り出されます。`”1,2″` を出力します。
70 / 70
`next()` を2回呼ぶと、最初は `1`、次に `2` が取り出されます。
あなたのスコアは
平均スコアは 0%