HTML5プロフェッショナル認定試験 レベル2「JavaScript文法とES6」の一問一答
📖 HTML5プロフェッショナル認定試験 レベル2「JavaScript文法とES6」の全75問と解説(一覧)
HTML5プロフェッショナル認定試験 レベル2のJavaScript文法とES6に関する一問一答(全75問)の正解と解説の一覧です。上の一問一答で実際に解いてから、ここで復習・確認できます。
-
問1.Number.MAX_VALUE は、JavaScriptの数値型で表現できる最大の正の有限値である。
正解:○(正しい)
解説:Number.MAX_VALUE は数値型で表現できる最大の正の有限値(約1.79×10の308乗)です。これを超える値は Infinity として扱われます。なお Number.MIN_VALUE は「最も小さい負の数」ではなく、0より大きい最小の正の値を表します。
-
問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.in演算子は、指定したプロパティ名がオブジェクト自身だけでなく、そのプロトタイプチェーン上に存在する場合にもtrueを返す。
正解:○(正しい)
解説:in演算子はオブジェクト自身のプロパティに加えて、プロトタイプチェーンをたどって継承されたプロパティも調べます。たとえば 'toString' in {} は、Object.prototype に toString があるため true になります。自身のプロパティだけを調べたい場合は hasOwnProperty() を使います。
-
問11.encodeURIComponent() は、encodeURI() ではエスケープされない「/」「?」「&」などの予約文字もエスケープする。
正解:○(正しい)
解説:encodeURI() はURL全体を対象とするため、「/」「?」「&」「#」などURLの区切りとして意味を持つ文字をエスケープしません。encodeURIComponent() はクエリの値などURLの一部分を対象とするため、これらの文字もエスケープします。
-
問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.classで定義したクラスを、new演算子を付けずに関数として呼び出すとTypeErrorになる。
正解:○(正しい)
解説:class構文で定義したクラスのコンストラクタは、new演算子を付けて呼び出す必要があります。new を付けずに A() のように呼び出すと TypeError が発生します。従来の function で書いたコンストラクタ関数は new なしでも呼び出せる点が異なります。
-
問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.isNaN('abc') は、引数を数値に変換せずに判定するため false を返す。
正解:×(誤り)
解説:グローバル関数の isNaN() は、引数をまず数値に変換してから NaN かどうかを判定します。'abc' は数値に変換すると NaN になるため、isNaN('abc') は true を返します。
-
問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.次のコードの出力は? const n = 3; console.log(`n=${n + 1}`);
- ア."n=${n + 1}"
- イ."n=31"
- ウ."n=4"
- エ."n=n+1"
正解:ウ."n=4"
解説:バッククォートで囲んだテンプレートリテラルでは、${} の中に書いた式が評価されて文字列に埋め込まれます。n + 1 は数値の加算として 4 になるため、出力は n=4 です。文字列連結のように n=31 になることはありません。
-
問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(void 0);
- ア.0
- イ.null
- ウ.undefined
- エ."void"
正解:ウ.undefined
解説:void演算子は右側の式を評価したうえで、その値にかかわらず常に undefined を返します。そのため void 0 の結果は undefined です。
-
問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 a = [1, 2]; const b = [...a, 3]; console.log(b.length);
- ア.2
- イ.3
- ウ.4
- エ.エラー
正解:イ.3
解説:スプレッド構文 ...a は配列 a の要素を展開するため、b は [1, 2, 3] になります。したがって b.length は 3 です。配列 a がそのまま1つの要素として入るわけではありません。
-
問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.次のコードの出力は? console.log(parseInt('08.9px'));
- ア.NaN
- イ.8.9
- ウ.8
- エ."08"
正解:ウ.8
解説:parseInt() は文字列の先頭から整数として解釈できる部分だけを読み取り、数値に変換します。'08.9px' では小数点の手前までの 08 が読み取られ、数値の 8 が返ります。先頭の 0 は8進数として扱われません。
-
問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.次のコードの出力は? function f() { return this.v; } console.log(f.call({ v: 7 }));
- ア.undefined
- イ.エラー
- ウ.{v: 7}
- エ.7
正解:エ.7
解説:Function.call() は第1引数に渡したオブジェクトを this として関数を呼び出します。f の中の this は {v: 7} になるため、this.v は 7 を返します。
-
問75.次のコードの出力は? console.log(10 % 3);
- ア.3
- イ.0
- ウ.3.33
- エ.1
正解:エ.1
解説:%は剰余演算子で、10を3で割った余り1を返す。