• このエントリーをはてなブックマークに追加

HTML5プロフェッショナル認定試験レベル2 サンプル問題

例題解説とその内容については、例題提供者の監修です。内容や試験問題に関わるお問い合わせにつきましては、LPI事務局ではお応えできませんのでご了承ください。
例題解説のご提供者さまを募集中です。LPI-Japan事務局までぜひご投稿ください。選ばれた方の例題解説は本サイトに掲載させていただきます。

2.1 JavaScript

例題1.16 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行したときに表示される文字列を選びなさい。
          
throw try catch finally

try {
	document.write('A');
	throw 'B';
	document.write('C');
} catch(e) {
	document.write(e);
} finally {
	document.write('D');
}
       
       
  • ABCD
  • AD
  • AeD
  • ABeD
  • ABD

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 E

JavaScriptの例外処理についての問題です。
通常はプログラム実行中に復帰不可能なエラーが発生した場合にはプログラムを即時終了します。
しかし、例外処理の機能を使用すると、エラー発生時に復帰処理を実行したり、独自のエラー表示などを行なえるようになります。

Webページ上のJavaScriptでは特に、途中でエラーが発生するとHTML内に複数のスクリプトがあっても、それ以降のスクリプトが実行されなくなります。
したがってエラーが発生しうる箇所に例外処理を記述しておくことで、スクリプトが実行されないことによる表示崩れなどを防ぐことが出来ます。

例外処理は以下のように記述します。

try {
	// エラーが発生する可能性のある処理;
}catch( e ){ // 変数eには発生した例外が代入される
	// エラーが発生した場合の処理;
}finally{
	// エラー発生の有無に係わらず実行される処理;
}
catch( e )では、変数 e には例外オブジェクトか後述のthrowで指定したオブジェクトが代入されます。
もちろん変数名は自由に変えられますが、catch(var e)のようにvarを付けるとエラーになるので注意が必要です。

また、throw オブジェクト;という形式で、明示的に例外を発生させることができます。

設問を見ると、'A'を表示したあと、throwで例外を発生させていますので、try内のスクリプトはそこで中断され、catchに移動します。したがって'C'は表示されません。
catch内ではthrow 'B'で指定された'B'が変数eに代入されていますので、'B'が表示されます。
最後に、必ず実行されるfinallyのなかで、'D'が表示されます。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.15 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
配列の要素を表示するfor in文の使い方として正しいものを選びなさい。
          
A. var array = new Array('A','B','C','D');
    for (var index in array ) {
	document.write(array[index]);
}
B. var array = new Array('A','B','C','D');
    for (array in var index ) {
	document.write(array[index]);
}
C. var array = new Array('A','B','C','D');
    for (var value in array ) {
	document.write(value);
}
D. var array = new Array('A','B','C','D');
    for (array as index =< value ) {
	document.write(value);
}

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A

繰り返しのfor inに関する出題です。
for inはオブジェクトに対してプロパティ全てを対象として繰り返しを行ないます。
文法は以下のようになります。

for(var プロパティ名を受けとる変数 in オブジェクト){
	// プロパティへのアクセスは オブジェクト[変数] の形でおこないます。
}
設問では配列に対してfor inを使用していますが、配列もオブジェクトですのでfor inを使うことができます。
配列の場合はキーがプロパティ名になります。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.14 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行したときに表示される文字列を選びなさい。
          
var array = new Array('A','B','C','D','E');

var i = 0;
do {
	i++;
	if( array[i] == 'B' ) {
		continue;
	}
	if( array[i] == 'D' ) {
		break;
	}
	document.write(array[i]);

}while( array[i] != 'E' );
        
  • ABCDE
  • C
  • B
  • ACE
  • BCD

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 B

do whileとcontinue,breakに関する出題です。
do whileは、繰り返しの本体部分を先に実行したあと条件を評価するタイプの繰り返し構文のひとつです。
あまり使われることはありませんが、通常のwhileだと繰り返し条件によっては一度も実行されないのに対してdo whileでは最低でも一度は実行されるので、データの入力を受けつけて、データをチェックして繰り返す場合などに使われることがあります。

forやwhile,do whileなど繰り返し構文において、繰り返しを制御する命令として、continueとbreakがあります。
continueは実行されたら以降の処理をせずにすぐに次の繰り返しを開始します。
breakは繰り返しを終了します。
どちらも条件分岐と組合せて複雑な繰り返しを実現することができます。

設問の例では、以下のような動作になります。

繰り返し回数を数えるカウンタ変数iは初期値0です。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.13 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行したときに表示される文字列を選びなさい。
          
var str = 'A';
switch(str) {
	case 'A':
		document.write('1');
	case 'B':
		document.write('2');
		break;
	default:
		document.write('3');
		break;
}		
        
  • 12
  • 123
  • 2
  • 1
  • 3

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A

switch caseとbreakに関する出題です。
switchは条件分岐の一種で、複数の分岐をシンプルに記述することができます。


switch(値) {
	case ラベル1:
		// 値とラベル1が同じときに実行される処理
		break; // 省略可
	case ラベル2:
		// 値とラベル2が同じときに実行される処理
		break; // 省略可
	default:
		// caseで記述された条件に一致するものが無い場合に実行される処理
		break; // 省略可
}

switchを使う場合には、break忘れに注意が必要です。
各caseでは値とラベルが同じ(===で比較)場合に実行する処理を記述しますが、処理の最後にbreakを記述することで、switchの処理から脱出します。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.12 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行した結果、trueになるものを選びなさい。
  • '123' === String('123')
  • new String('123') === String('123')
  • new String('123') === '123'
  • 123 === new Number(123)
  • 123 === Number(123)

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A,E
プリミティブ型とオブジェクト型に関する出題です。
JavaScriptはオブジェクト型指向言語と言われています。
しかし、処理の高速化のため基本的な一部のデータ型については、オブジェクトとしてではなく値そのものを扱います。これをプリミティブ型と呼びます。
プリミティブ型は、Boolean,Null,Undefined,Number,Stringの5種類です(新しい規格であるECMAScript2015ではSymbolが追加されます)。

スクリプトの中で、文字列リテラル 'ABC' や数値リテラル 123 などと記述したものは、オブジェクトではなくプリミティブ値として扱われます。

プリミティブ値に対してメソッドを呼んだり、プロパティにアクセスをすると、JavaScriptは自動的にプリミティブ値を対応するオブジェクトに変換して処理を行ないます。そのためプリミティブ値とオブジェクトを意識することなくスクリプトを記述できます。

コンストラクタ関数であるString()、Number()は、newの有無で生成される値の型が変わります。
String('123')で生成されるのはプリミティブ値で、new String('123')で生成されるのはオブジェクトになります。
一方、Arrayのように,newの有無で生成される値の種類が変化しないコンストラクタ関数もあります。

同値演算子 === を使うと、プリミティブ値とオブジェクト値を区別して比較できます。 プリミティブ値である'123'と、オブジェクトを生成するnew String('123')を同値演算子で比較するとfalseになります。

各選択肢のデータ型は以下のようになります。
A. 文字列プリミティブ === 文字列プリミティブ (true)
B. 文字列オブジェクト === 文字列プリミティブ (false)
C. 文字列オブジェクト === 文字列プリミティブ (false)
D. 数値プリミティブ === 数値オブジェクト (false)
E. 数値プリミティブ === 数値プリミティブ (true)

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.11 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行した結果、表示されるものを選択しなさい。
          
  function f(val){
  document.write(val);
  document.write(this);
}

f.call('A','B');
        
        
  • AB
  • BA
  • AA
  • BB
  • エラーになり、何も表示されない

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 B
all()メソッドを利用した場合のthisオブジェクトの使い方についての出題です。

thisはコンテキストオブジェクト(カレントオブジェクト)を値とする、読み取り専用の特別な変数です。
コンテキストオブジェクトとは、その時点で処理の対象となっているオブジェクトを指します。
例えば、object.method()と言うかたちでメソッドを呼び出した場合、メソッド内でのthisはobjectを指します。

thisは読取専用のため、直接代入することはできませんが、関数オブジェクトのcallメソッドを利用することで、その関数(メソッド)内でのthisオブジェクトの内容を変更できます。allメソッドのひとつめの引数はthisに代入され、ふたつめ以降の引数は関数(メソッド)の引数として使用されます。

設問のスクリプトでは、call('A','B')としてメソッドを呼んでいるため、'A'がthisに、'B'が引数のvalに代入されて関数が実行されます。
関数内ではval,thisの順に出力されるため、表示は'BA'となります。

jQueryでもその機能を実現するためにcallメソッド(またはapplyメソッド)が使用されています。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.10 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行したとき、変数aの値を選択しなさい。
          
function f(){
		f = 10;
}
var a = f();
       
       
  • undefined
  • NULL
  • 10
  • エラーになる

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A
JavaScriptで関数の戻り値を明示的に指定しない場合、戻り値はundefined(未定義値)になります。
戻り値を明示的に指定するには、

function f(){
	var f = 10;
	return f;
}
var a = f();

のようにreturnの後に戻り値を記述します。この場合、変数aの値は10になります。
Microsoft VBAなど、一部のプログラム言語では関数名に値を代入することで戻り値を指定しますが、JavaScriptではreturnの後に指定します。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.9 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行した結果を選びなさい。
          
    var obj = {
	f:function(){
		document.write('A');
	}
}
function f(){
	document.write('B');
}

with(obj) {
	function f(){
		document.write('C');
	}
	f();
}
        
        
  • Aが表示される
  • Bが表示される
  • Cが表示される
  • エラーになる

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A
withは指定したオブジェクトのメンバ(メソッドとプロパティ)を展開して使用できるようにする構文です。
withを使用すると、メンバ検索の順番が変更されて指定したオブジェクトのメンバを最初に検索するため、グローバルなメソッドや、with内で定義されたメソッドよりもオブジェクトのメソッドが先に該当することになります。

with(document) {
	write('A');
	write('B');
}

のように、同一オブジェクトに対する複数のメソッド呼び出しを短く書けるなど一見便利そうですが、メソッドやプロパティが動的に変化するオブジェクトでは動作が予測できなくなったり、処理が遅くなることなどから現在はwithの使用は推奨されていません。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.8 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下の選択肢のうち、プリミティブな文字列が生成されるスクリプトを二つ選びなさい。
  • Number(100)
  • new Date()
  • String('abc')
  • new String('abc')
  • Date()

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 C,E
一部の組込みコンストラクタ関数はnewキーワードの有無で返り値が異なります。
String関数はnewがつくとStringオブジェクトが生成されますが、newが無いとプリミティブな文字列を生成します。
また、Date関数はnewがつくとDateオブジェクト、newが無いと現在時刻を表わすプリミティブな文字列を返します。
その他の選択肢はオブジェクトを生成します。

選択肢にはありませんが、Array関数のようにnewの有無で差異がないものもあります。

実際の開発でnewをつけないケースはまず無いと思いますが、newの付け忘れによるトラブルはありえますのでこれらの仕様を覚えておくと良いでしょう。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.7 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトのうち、実行した結果、2次元配列のオブジェクトが生成されるものを2つ選びなさい。
  • var array = [];
    array[0][0] = 'a';
  • var array = [];
    array[0] = [];
    array[0][0] = 'a';
  • var array = [][];
    array[0][0] = 'a';
  • var array = [['a']];

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 B,D
多次元配列に関する問題です。
JavaScriptでは、配列の要素に配列が含まれているものを多次元配列と呼びます。
配列の中に配列があるものを2次元配列、配列の中の配列に、さらに配列が要素として含まれるものを3次元配列と言い、入れ子になっている階層をnとしたときにn+1次元配列となります。
選択肢Aはarrayに代入された配列は1次元配列のため、[0][0]という形で要素にアクセスできません。
選択肢Bは、最初に作成された配列は1次元ですが、その後で要素に配列を代入しているため2次元配列になっています。
選択肢Cは、配列を作成する書式として、[][]は認められません。
選択肢Dは、配列の要素として配列を作成し、その要素に'a'を格納していますので、2次元配列になっています。
実際にスクリプトを実行すると、選択肢A,Cはエラーになります。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.6 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行した結果、表示される文字列は次のうちどれか。
          
var array = new Array('a','b');
array[4] = 'c';
array.length = 3;
document.write(array);

  • a,b
  • a,b,
  • a,b,c
  • a,b,c,

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 B
配列のlengthプロパティに関する問題です。
配列のlengthプロパティに要素の数よりも小さい数値を代入すると、配列の要素が先頭から数値以下の個数に切り詰められます。
もう一つのポイントは、配列の添字を指定して要素を追加する際に、それまでの添字の最大値から間の空いた数値を指定すると、その間の要素は未定義値であるundefinedで埋められるということです。
したがって、最初の二行の結果、配列の要素は['a','b',undefined,'c']となります。
三行目でこの配列の先頭から3要素に切り詰められ、['a','b',undefined]になります。
document.writeで配列を出力するとカンマ区切りで要素の一覧を文字列化しますが、undefinedは空文字列として扱われるためa,b,のあとには何も表示されません。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.5 「2.1.1 JavaScript文法」
レベル2の出題範囲「2.1.1 JavaScript文法」からの出題です。
以下のスクリプトを実行した結果、数値の3を要素として持つ配列を生成するものを選びなさい。
  • var array = Array(3);
  • var array = {3};
  • var array = new Array(3);
  • var array = [3];

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 D
配列の生成方法における複数の記述方法に関する問題です。
配列を生成する方法は2つあり、コンストラクタ関数Array()によるものと、配列リテラル[]によるものです。
Array()は、String()などとは異なり、キーワードnewの有無に関わらずArrayオブジェクトを生成します。
ところが、Array()にはひとつ問題があり、Array(3)のように数値を一つ引数に渡すと要素数3の配列を生成します。 (2つ以上引数を指定すると要素になります。)
したがって、数値の3だけを要素に持つ配列はArray()だけでは作れない(空配列を作ってからarray[0]=3;)ということになります。
一方、[3]では単純に数値3を要素に持つ配列が生成されます。
オブジェクトリテラル{ }では、配列オブジェクトでは無く、単なるオブジェクトを生成しますが、選択肢Bの形式ではプロパティ名が指定されていないためエラーになります。

出題範囲の詳細

例題解説の提供:HTML5アカデミック認定校 株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏

例題1.4 「2.1.1 JavaScript文法 strictモードの概要」
レベル2の出題範囲「2.1.1 JavaScript文法 strictモードの概要」からの出題です。
strictモードについて正しいものを全て選択しなさい。
  • strictモードを使用すると厳密なコードになるため、潜在バグを発見できる可能性が上がる。
  • strictモードを使用すると厳密なコードになるため、処理を高速化できることがある。
  • "use strict"を記述したら、それ以降のコードに適用される。
  • strictモードを宣言したコードは、strictモードをサポートしていないブラウザでは動作しない。

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

正解 A, B

strictモードを適用したコードは、コードの曖昧さが減るため、潜在バグの低減やJavaScriptエンジンによる最適化処理の負担軽減による高速化が期待できます。

strictモードの宣言は「"use strict"」というコードが、スクリプト内、あるいは関数内の意味のあるコードより前に記述されている必要があります。

「スクリプト、あるいは関数の先頭に記述する必要がある」、「関数内に宣言した場合は適用される範囲は関数内だけ」、という意味で、"use strict"を記述さえすれば、「それ以降のコードに適用される」という訳ではありません。


例)
// sample1.js ------------------------
   // comments....
   "use strict";
   var x, y, z;
   ........

// sample2.js ------------------------
   var x = function(){
       "use strict";
       var y, z;
       ........
   }; 

例を見て分かる通り、strictモードの宣言はただ文字列を記述しているだけで、コードとして無意味なので、strictモードをサポートしていないブラウザでは無視され、正常に動作します。

strictモードの使用は、特に潜在バグ低減の恩恵により推奨されるべきと思いますが、strictモードを関数でなく全体に宣言すると、プラグインやライブラリなどの外部のスクリプトを使用する場合にもstrictモードが適用されるため、問題が起きる可能性に留意する必要があります。

出題範囲の詳細

例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏

例題1.3「2.1.1 JavaScript文法 prototypeプロパティ」
レベル2の出題範囲「2.1.1 JavaScript文法 prototypeプロパティ」からの出題です。
JavaScriptのオブジェクト指向について、間違っているものを一つ選択しなさい。
  • 継承はprototypeプロパティを使って定義できる。
  • メンバのアクセス権に関する構文がないため、パブリックなメンバしか作成できない。
  • 継承する親はいつでも変更できるが、既に生成されたインスタンスには反映されない。
  • メンバはprototypeプロパティを使って定義できる。

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

答え B
解説:アクセス権を設定する構文はないが、スコープを意識すればプライベートなメンバも作成できます。
ただし、プライベートなメンバ変数へのアクセスするにはコンストラクタ内に限られるため、これを扱う関数もコンストラクタ内に書く必要があります。
コンストラクタ内に書いたものは、インスタンス毎にメモリに展開されるため、プライベート変数のgetter、setterだけをコンストラクタ内に書き、それ以外の処理はprototype側に作成するようにしたいですね。

以下、サンプルコードです。

// クラス定義 ///////////////////////////////////////////////////////////
var MyClass = function(){
    // スコープ内でのローカルな変数/関数定義は、プライベートとして利用可能
    var privateVar = "private";
    var privateFunc = function(){
        alert(privateVar);
    };

    // 以下、パブリック
    this.setPrivateVar = function(chg){
        privateVar = chg;
    };

    this.getPrivateVar = function(){
        return privateVar;
    };

    this.publicVar = "public";
    this.publicFunc = function(){
        alert(MyClass.staticVar);    // "static"
        alert(this.protoVar);        // "prototype"
        alert(this.publicVar);       // "public"
        alert(this.getPrivateVar()); // "private"
    };
};

MyClass.prototype.protoVar = "prototype"; 
MyClass.prototype.protoFunc = function(){
    alert(MyClass.staticVar);    // "static"
    alert(this.protoVar);        // "prototype"
    alert(this.publicVar);       // "public"
    alert(this.getPrivateVar()); // "private"
};
MyClass.prototype.protoTwicePrivateVar = function(){
    this.setPrivateVar(this.getPrivateVar() + this.getPrivateVar()); };

MyClass.staticVar = "static";
MyClass.staticFunc = function(){
    alert(MyClass.staticVar);  // "static"
};

// インスタンス生成 ////////////////////////////////////////////////
var my = new MyClass();
MyClass.staticFunc();  // "static"
my.protoFunc();        // "static", "prototype", "public", "private"
my.publicFunc();       // "static", "prototype", "public", "private"
my.setPrivateVar("hoge");
my.publicFunc();       // "static", "prototype", "public", "hoge"
my.protoTwicePrivateVar();
my.publicFunc();       // "static", "prototype", "public", "hogehoge"
//my.privateFunc();      // エラー

// 継承 ///////////////////////////////////////////////////////////
var MyClass2 = function(){};
MyClass2.prototype = new MyClass();  // 継承
MyClass2.prototype.protoVar = "prototype2";

var my2 = new MyClass2();
my2.publicVar = "public2";
my2.setPrivateVar("private2");
my2.protoFunc();       // "static", "prototype2", "public2", "private2"
my2.publicFunc();      // "static", "prototype2", "public2", "private2"
my2.setPrivateVar("hoge2");
my2.publicFunc();      // "static", "prototype2", "public2", "hoge2"
my2.protoTwicePrivateVar();
my2.publicFunc();      // "static", "prototype2", "public2", "hoge2hoge2"

// 継承変更 //////////////////////////////////////////////////////
var MyClass3 = function(){};
MyClass3.prototype = new MyClass();  // 継承
MyClass3.prototype.protoVar = "prototype3";

var my3 = new MyClass3();
my3.protoFunc();       // "static", "prototype3", "public", "private"

MyClass3.prototype = new MyClass2();  // 継承変更
my3.protoFunc();       // "static", "prototype3", "public", "private"
// MyClass2に変更する前に生成したインスタンスなので、"prototype3"のまま。

var my3b = new MyClass3();
my3b.protoFunc();      // "static", "prototype2", "public", "hoge2hoge2"
// MyClass2に変更した後に生成したインスタンスなので、"prototype2"。

出題範囲の詳細

例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏

例題1.2「2.1.1 JavaScript文法 void演算子」
レベル2の出題範囲「2.1.1 JavaScript文法 void演算子」からの出題です。
void演算子は右辺の式を評価した結果、何を返すのか正しいものを一つ選択しなさい。
  • undefined を返す。
  • 0 を返す。
  • falseを返す。
  • 評価結果をNOT演算したものを返す。

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

答え A
ECMAScript5によれば、式の結果に関わらずプリミティブなundefinedを返します。
http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.2
a要素において、onclickでJavaScriptを動作させるときに、href属性に"javascript:void(0)"を設定して、ブラウザによる再描画を防ぐ手法が有名ですが、"undefined"の9バイトを記述する代わりに"void 0"の6バイトにして、スクリプトの量を少なくする、また、ECMAScript3に準拠した古いブラウザでは、undefinedはグローバル変数として定義されている上に変更可能だったため、プリミティブなundefinedであることを保証したい場合にvoid演算子の結果を使う、などの用途があります。

出題範囲の詳細

例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏

例題1.1「2.1.1 JavaScript文法 特殊数値(NaN)」
レベル2の出題範囲「2.1.1 JavaScript文法 特殊数値(NaN)」からの出題です。
NaNについて正しいものを全て選択しなさい。
  • 数値でないことを表す特殊な値である。
  • ゼロでの除算やNumber.parseIntメソッドの結果が数値にならない、Math.sqrtメソッドの結果が虚数の場合にNaNになる。
  • NaNであるかを調べるには、NaNと比較演算子で比較すれば良い。
  • 数値ではないが、Number型である。

※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。

答えはこちら

答え A, B, D
"Not-a-Number"の略です。
NaNは、NaN自身とも違うもの、とされています。NaNであるか調べるには、Number.isNaN()メソッドを使います。
型はtypeof演算子で typeof(NaN) とすると、"number"と返ってきます。Infinity もNumber型です。

出題範囲の詳細

例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏

このページの先頭へ