HTML5プロフェッショナル認定試験 レベル2「JavaScript文法とES6」の一問一答
📖 HTML5プロフェッショナル認定試験 レベル2「JavaScript文法とES6」の全75問と解説(一覧)
HTML5プロフェッショナル認定試験 レベル2のJavaScript文法とES6に関する一問一答(全75問)の正解と解説の一覧です。上の一問一答で実際に解いてから、ここで復習・確認できます。
-
問1.JavaScriptのプリミティブ型は、string・number・boolean・null・undefined・symbol・bigintの7種類である。
正解:○(正しい)
解説:ES2020以降、上記7種類がプリミティブ型。これ以外(配列・関数等)はオブジェクト型である。
-
問2.constで宣言した変数は再代入できないが、その変数が参照するオブジェクトのプロパティは変更できる。
正解:○(正しい)
解説:constは束縛(再代入)を禁止するだけで、参照先オブジェクトの中身は変更可能である。
-
問3.===演算子は型変換を行わずに値と型の両方を比較する厳密等価演算子である。
正解:○(正しい)
解説:===は型変換せず、型も値も等しい場合のみtrueを返す。==は型変換(型強制)を行う。
-
問4.varで宣言された変数は関数スコープを持つが、letとconstはブロックスコープを持つ。
正解:○(正しい)
解説:varは関数スコープ(またはグローバル)、let/constは波括弧単位のブロックスコープを持つ。
-
問5.アロー関数は自身のthisを持たず、定義された場所の外側のthisを継承する。
正解:○(正しい)
解説:アロー関数はthisを束縛せず、レキシカルスコープ(定義時の外側)のthisを参照する。
-
問6.JavaScriptの関数宣言(function文)は巻き上げ(hoisting)により定義より前で呼び出せる。
正解:○(正しい)
解説:関数宣言は定義全体が巻き上げられるため、宣言より前のコードからでも呼び出せる。
-
問7.letで宣言された変数も巻き上げられるが、宣言前にアクセスするとTDZ(一時的死帯)によりエラーになる。
正解:○(正しい)
解説:let/constも巻き上げられるが初期化前はTDZにあり、参照するとReferenceErrorになる。
-
問8.クロージャとは、関数が自身の外側のスコープの変数を保持し続ける仕組みである。
正解:○(正しい)
解説:クロージャは関数とそれを囲むレキシカル環境の組み合わせで、外側変数を参照保持する。
-
問9.Promiseは非同期処理の結果を表すオブジェクトで、pending・fulfilled・rejectedの3状態を持つ。
正解:○(正しい)
解説:Promiseは保留(pending)・成功(fulfilled)・失敗(rejected)の3状態を持つ。
-
問10.Mapはキーに任意の型(オブジェクトを含む)を使用でき、挿入順を保持する。
正解:○(正しい)
解説:Mapはオブジェクトを含む任意の型をキーにでき、挿入順を保持する点が通常のオブジェクトと異なる。
-
問11.Setは重複しない値のコレクションで、同じ値を追加しても1つしか保持しない。
正解:○(正しい)
解説:Setは一意な値のみを保持し、重複した値の追加は無視される。
-
問12.async関数は常にPromiseを返し、await式はPromiseの解決を待つ。
正解:○(正しい)
解説:async関数の戻り値は必ずPromiseでラップされ、awaitはPromiseの解決値を取り出す。
-
問13.JSON.stringify()はJavaScriptのオブジェクトをJSON文字列に変換する。
正解:○(正しい)
解説:JSON.stringify()はオブジェクトをJSON文字列に変換し、JSON.parse()は逆を行う。
-
問14.rest引数(...args)は関数に渡された残りの引数を配列としてまとめる。
正解:○(正しい)
解説:rest構文...argsは可変長の引数を配列にまとめる。spread構文は逆に展開する。
-
問15.instanceof演算子はオブジェクトが特定のコンストラクタのインスタンスかを判定する。
正解:○(正しい)
解説:instanceofはプロトタイプチェーンを辿り、指定コンストラクタのインスタンスか判定する。
-
問16.Symbol()で生成された値は、引数の説明が同じでも常に一意で互いに等しくない。
正解:○(正しい)
解説:説明が同じSymbol同士も===で比較するとfalse。Symbolは常に一意な値を生成する。
-
問17.strictモードは use strict; を記述することで有効になり、未宣言変数への代入などをエラーにする。
正解:○(正しい)
解説:strictモードは厳格な構文チェックを行い、暗黙のグローバル変数生成などを禁止する。
-
問18.try-catch-finally文のfinallyブロックは、例外の有無にかかわらず必ず実行される。
正解:○(正しい)
解説:finallyは正常終了・例外発生・returnのいずれの場合でも必ず実行される。
-
問19.spliceメソッドは元の配列を変更(破壊的操作)するが、sliceは元の配列を変更しない。
正解:○(正しい)
解説:spliceは元配列を直接変更する破壊的メソッド、sliceは新配列を返す非破壊的メソッド。
-
問20.プロトタイプチェーンにより、オブジェクトは自身にないプロパティを親(プロトタイプ)から継承して参照できる。
正解:○(正しい)
解説:プロパティ参照時、自身→prototype→…と連鎖を辿る。これがプロトタイプベース継承である。
-
問21.NaN === NaN はtrueを返す。
正解:×(誤り)
解説:誤り。正しくは、NaNは自分自身を含むいかなる値とも等しくないためfalse。判定にはNumber.isNaN()を使う。
-
問22.テンプレートリテラルはシングルクォートで囲み、その中で式を埋め込む。
正解:×(誤り)
解説:誤り。正しくは、テンプレートリテラルはバッククォートで囲む。シングルクォートでは式は展開されない。
-
問23.delete演算子で配列の要素を削除すると、その配列の長さ(length)も自動的に1減る。
正解:×(誤り)
解説:誤り。正しくは、deleteは要素をemptyにするだけでlengthは変わらない。長さを詰めるにはspliceを使う。
-
問24.argumentsオブジェクトはアロー関数内でも通常関数と同様に自身の引数を参照できる。
正解:×(誤り)
解説:誤り。正しくは、アロー関数は自身のargumentsを持たず、外側のargumentsを参照する。
-
問25.typeof演算子で配列を調べると array という文字列が返る。
正解:×(誤り)
解説:誤り。正しくは、配列はオブジェクト型なのでtypeof []は object を返す。判定はArray.isArray。
-
問26.bind()メソッドは指定したthisを束縛した関数を即座に実行する。
正解:×(誤り)
解説:誤り。正しくは、bindはthisを束縛した新しい関数を返すだけで即実行はしない。即実行はcall/apply。
-
問27.空でない文字列 false を Boolean() で変換すると false になる。
正解:×(誤り)
解説:誤り。正しくは、空でない文字列は全てtruthyなので、Boolean('false')はtrueになる。
-
問28.typeof演算子は未宣言の変数に対して使用するとReferenceErrorになる。
正解:×(誤り)
解説:誤り。正しくは、typeofは未宣言変数に対してもエラーを出さず undefined を返す例外的な演算子。
-
問29.==演算子では、数値の0と空文字は型が違うため等しくないと評価される。
正解:×(誤り)
解説:誤り。正しくは、==は型変換するため空文字は0に変換され、0 == '' はtrueになる。
-
問30.forEach()メソッドは各要素を処理した結果を集めた新しい配列を返す。
正解:×(誤り)
解説:誤り。正しくは、forEachは戻り値がundefinedで新配列を返さない。新配列を作るのはmap。
-
問31.let で同じスコープに同名変数を再宣言しても、エラーにならず上書きされる。
正解:×(誤り)
解説:誤り。正しくは、let/constは同一スコープでの再宣言を禁止しSyntaxErrorになる。varは再宣言可。
-
問32.Promise.all() は1つでもPromiseが失敗しても、残りの成功結果を返して解決する。
正解:×(誤り)
解説:誤り。正しくは、Promise.allは1つでもrejectされると即座にreject(失敗)する。
-
問33.スプレッド構文 {...obj} はオブジェクトのディープコピー(深い複製)を作成する。
正解:×(誤り)
解説:誤り。正しくは、スプレッドは浅いコピーで、ネストしたオブジェクトは参照が共有される。
-
問34.プリミティブ型は参照型であり、変数同士の代入では同じ実体を共有する。
正解:×(誤り)
解説:誤り。正しくは、プリミティブは値型で代入時に値そのものがコピーされる。参照型はオブジェクト。
-
問35.for-in文は配列の要素の値を順番に取り出すために使うのが推奨される。
正解:×(誤り)
解説:誤り。正しくは、for-inはキー(インデックス)を反復する。値の反復にはfor-ofが推奨される。
-
問36.Number('10px') を実行すると数値10が返る。
正解:×(誤り)
解説:誤り。正しくは、Number は文字列全体が数値でないとNaNを返す。先頭部分を取るのはparseInt。
-
問37.map・filter・reduce はいずれも元の配列を破壊的に変更する。
正解:×(誤り)
解説:誤り。正しくは、map/filter/reduceは非破壊的で新しい値を返し、元配列は変更しない。
-
問38.console.log(typeof null) の結果は文字列 null である。
正解:×(誤り)
解説:誤り。正しくは、typeof nullは歴史的経緯から object を返す。仕様上のバグだが互換性のため未修正。
-
問39.アロー関数は new 演算子でインスタンス化できるコンストラクタとして使える。
正解:×(誤り)
解説:誤り。正しくは、アロー関数はコンストラクタにできず、newで呼ぶとTypeErrorになる。
-
問40.import / export の export default は1つのモジュールに複数定義できる。
正解:×(誤り)
解説:誤り。正しくは、default exportはモジュールにつき1つのみ。名前付きexportは複数定義できる。
-
問41.次のコードの出力は? console.log(typeof undefined);
- ア."undefined"
- イ."object"
- ウ."null"
- エ."none"
正解:ア."undefined"
解説:typeof undefinedは undefined を返す。undefinedは値であり型でもある。
-
問42.次のコードの出力は? console.log(0 == '');
- ア.true
- イ.false
- ウ.0
- エ.NaN
正解:ア.true
解説:==では空文字は数値0に変換され、0 == 0 となりtrueになる。
-
問43.次のコードの出力は? console.log(typeof NaN);
- ア."number"
- イ."NaN"
- ウ."undefined"
- エ."object"
正解:ア."number"
解説:NaNはnumber型の特殊な値であり、typeofは number を返す。
-
問44.次のコードの出力は? console.log(1 + '2' + 3);
- ア."123"
- イ.6
- ウ."15"
- エ."33"
正解:ア."123"
解説:1+'2'は文字列連結で'12'、さらに'12'+3で'123'となる。+は左から評価される。
-
問45.次のコードの出力は? console.log([1,2,3].map(x => x * 2));
- ア.[2, 4, 6]
- イ.[1, 2, 3]
- ウ.[1, 4, 9]
- エ.6
正解:ア.[2, 4, 6]
解説:mapは各要素に関数を適用した新配列を返す。各要素を2倍にして[2,4,6]となる。
-
問46.次のコードの出力は? console.log(2 ** 3);
- ア.8
- イ.6
- ウ.9
- エ.5
正解:ア.8
解説:**はべき乗演算子(ES2016)で、2の3乗=8を返す。
-
問47.次のコードの出力は? console.log([1,2,3].reduce((a,b)=>a+b,0));
- ア.6
- イ.0
- ウ.3
- エ.[1,2,3]
正解:ア.6
解説:reduceは累積値を計算する。初期値0に1,2,3を順に加算し6になる。
-
問48.次のコードの出力は? console.log(typeof function(){});
- ア."function"
- イ."object"
- ウ."undefined"
- エ."Function"
正解:ア."function"
解説:関数はオブジェクトの一種だが、typeofは特別に function を返す。
-
問49.次のコードの出力は? console.log(Array.from('abc'));
- ア.['a', 'b', 'c']
- イ."abc"
- ウ.['abc']
- エ.[a, b, c]
正解:ア.['a', 'b', 'c']
解説:Array.fromはイテラブル等から配列を生成する。'abc'から要素3つの配列になる。
-
問50.次のコードの出力は? console.log(typeof typeof 1);
- ア."number"
- イ."string"
- ウ."object"
- エ."undefined"
正解:イ."string"
解説:typeof 1は number(文字列)、さらにその typeof は string を返す。
-
問51.次のコードの出力は? console.log('5' - 3);
- ア."53"
- イ.2
- ウ."2"
- エ.NaN
正解:イ.2
解説:-演算子は文字列を数値に変換するため、'5'は5となり5-3=2が出力される。
-
問52.次のコードの出力は? console.log([1,2,3,4].filter(x => x % 2 === 0));
- ア.[1, 3]
- イ.[2, 4]
- ウ.[1, 2, 3, 4]
- エ.2
正解:イ.[2, 4]
解説:filterは条件を満たす要素のみの新配列を返す。偶数の[2,4]となる。
-
問53.次のコードの出力は? console.log(Boolean(''));
- ア.true
- イ.false
- ウ.空文字
- エ.undefined
正解:イ.false
解説:空文字はfalsyな値なので、Boolean('')はfalseを返す。
-
問54.次のコードの出力は? console.log([1,2,3].includes(2));
- ア.false
- イ.true
- ウ.1
- エ.2
正解:イ.true
解説:includesは指定値が配列に含まれるかをbooleanで返す。2は含まれるのでtrue。
-
問55.次のコードの出力は? console.log(Math.floor(4.7));
- ア.5
- イ.4
- ウ.4.7
- エ.3
正解:イ.4
解説:Math.floorは引数以下の最大の整数(切り捨て)を返す。4.7は4になる。
-
問56.次のコードの出力は? console.log(typeof Symbol());
- ア."object"
- イ."symbol"
- ウ."Symbol"
- エ."string"
正解:イ."symbol"
解説:Symbol()はsymbol型の一意な値を生成する。typeofは symbol を返す。
-
問57.次のコードの出力は? console.log(JSON.parse('{"x": 5}').x);
- ア."5"
- イ.5
- ウ.undefined
- エ.{x:5}
正解:イ.5
解説:JSON.parseはJSON文字列をオブジェクトに変換し、.xで数値5を取得する。
-
問58.次のコードの出力は? console.log(0 || 'a' || 'b');
- ア.0
- イ."a"
- ウ."b"
- エ.true
正解:イ."a"
解説:||は最初のtruthyな値を返す。0はfalsyなので'a'が返される。
-
問59.次のコードの出力は? console.log([1,2,3].indexOf(2));
- ア.0
- イ.1
- ウ.2
- エ.-1
正解:イ.1
解説:indexOfは指定値が最初に現れるインデックスを返す。2はインデックス1にある。
-
問60.次のコードの出力は? console.log(null ?? 'default');
- ア.null
- イ.undefined
- ウ."default"
- エ.false
正解:ウ."default"
解説:??は左辺がnullまたはundefinedの時のみ右辺を返す。'default'となる。
-
問61.次のコードの出力は? console.log(typeof null);
- ア."null"
- イ."undefined"
- ウ."object"
- エ."number"
正解:ウ."object"
解説:typeof nullは歴史的な仕様上のバグにより object を返す。互換性のため未修正。
-
問62.次のコードの出力は? console.log([1,2,3].find(x => x > 1));
- ア.1
- イ.[2, 3]
- ウ.2
- エ.3
正解:ウ.2
解説:findは条件を満たす最初の要素を返す。1より大きい最初の要素は2である。
-
問63.次のコードの出力は? console.log('abc'.length);
- ア.2
- イ.4
- ウ.3
- エ.undefined
正解:ウ.3
解説:文字列のlengthプロパティは文字数を返す。'abc'は3文字である。
-
問64.次のコードの出力は? console.log(Number('12a'));
- ア.12
- イ."12a"
- ウ.NaN
- エ.0
正解:ウ.NaN
解説:Number()は文字列全体が数値でないとNaNを返す。'12a'は変換できずNaN。
-
問65.次のコードの出力は? console.log(5 / 0);
- ア.0
- イ.NaN
- ウ.Infinity
- エ.エラー
正解:ウ.Infinity
解説:正の数を0で割るとInfinity(無限大)を返す。例外は発生しない。
-
問66.次のコードの出力は? console.log(Math.max(1, 5, 3));
- ア.1
- イ.3
- ウ.5
- エ.9
正解:ウ.5
解説:Math.maxは引数の中の最大値を返す。1,5,3の最大は5である。
-
問67.次のコードの出力は? const a = {x:1}; const b = a; b.x = 2; console.log(a.x);
- ア.1
- イ.undefined
- ウ.2
- エ.エラー
正解:ウ.2
解説:bはaと同じオブジェクトを参照するため、b.x変更でa.xも2になる(参照型)。
-
問68.次のコードの出力は? const s = new Set([1,2,2,3]); console.log(s.size);
- ア.4
- イ.1
- ウ.3
- エ.2
正解:ウ.3
解説:Setは重複を除くため、[1,2,2,3]からは要素3つとなりsizeは3。
-
問69.次のコードの出力は? console.log(['1','2','3'].map(Number));
- ア.['1','2','3']
- イ.[NaN, NaN, NaN]
- ウ.[1, 2, 3]
- エ.6
正解:ウ.[1, 2, 3]
解説:map(Number)で各文字列を数値に変換し[1,2,3]を返す。
-
問70.次のコードの出力は? const [a, b] = [10, 20]; console.log(a + b);
- ア.10
- イ.20
- ウ.[10, 20]
- エ.30
正解:エ.30
解説:配列の分割代入でa=10、b=20が代入され、a+b=30が出力される。
-
問71.次のコードの出力は? console.log(parseFloat('3.14abc'));
- ア.3
- イ.NaN
- ウ."3.14"
- エ.3.14
正解:エ.3.14
解説:parseFloatは先頭から浮動小数点として解釈できる部分を返す。3.14となる。
-
問72.次のコードの出力は? console.log([1,2,3].reverse());
- ア.[1, 2, 3]
- イ.[2, 1, 3]
- ウ.[1, 3, 2]
- エ.[3, 2, 1]
正解:エ.[3, 2, 1]
解説:reverseは配列を逆順にする(破壊的)。[3,2,1]を返す。
-
問73.次のコードの出力は? let x; console.log(x);
- ア.null
- イ.0
- ウ.エラー
- エ.undefined
正解:エ.undefined
解説:宣言のみで初期化されていない変数の値はundefinedである。
-
問74.次のコードの出力は? const f = (a, b = 5) => a + b; console.log(f(3));
- ア.3
- イ.5
- ウ.NaN
- エ.8
正解:エ.8
解説:デフォルト引数によりb=5が使われ、a=3との和8が出力される。
-
問75.次のコードの出力は? console.log(10 % 3);
- ア.3
- イ.0
- ウ.3.33
- エ.1
正解:エ.1
解説:%は剰余演算子で、10を3で割った余り1を返す。