Javascriptインタビューの質問

あなたが候補者に尋ねることができる質問の選択を提案します。 応答はポップアップウィンドウに表示されます。

被験者は、警告ウィンドウに何が表示されるかを予測するよう求められます。

ここでの主なことは、なぜそのような答えを受け取ったのかを説明することです。

質問に微妙な点があるため、答えが実際のものと異なっていても怖くない。 次に、そのような結果がどのように判明したかを説明する必要があります。

コードをブラウザコンソールにコピーするか、HTMLページに貼り付けます。 各アラートの後に、インタビュー対象者に次に何が起こるか、およびその理由を尋ねます。



それでは、始めましょう:

alert("Start"); // *************************************************************************************** alert("Test 1.1: " + typeof Array); alert("Test 1.2: " + typeof Array.prototype); alert("Test 1.3: " + typeof Array.prototype["push"]); // *************************************************************************************** var n = ""; if (n) { alert("Test 2.1: " + 'true'); } else { alert("Test 2.1: " + 'false'); } alert("Test 2.2: " + (null == undefined)); alert("Test 2.3: " + (n == !!n)); // ****************************************************************************** alert("Test 3: " + ({}.a != {}.b)); // **************************************************************************************** function C() { } Ca = 2; var g = new C(); alert("Test 4: " + ga); // **************************************************************************** var s = {a: 0}; s.prototype = {b: 1}; alert("Test 5: " + (sa == sb)); // ******************************************************************************* function A() { this.a = 4; } A.prototype = {a: 2}; var x = new A({a: 7}); alert("Test 6.1: " + Aa); alert("Test 6.2: " + xa); // *********************************************************************************** var a; function func(arg) { if (arg < 0) { return 1; } else if (arg > 0) { return 2; } else if (arg == 0) { return 3; } } var b = func(a); alert("Test 7: " + b); // ********************************************************************************* try { var tst = 5 / 0; if (tst > NAN) { throw new Error('bigger'); } else if (isFinite(tst)) { throw 'lower'; } throw 0; } catch (e) { alert("Test 8: " + (e.toString())); } // ****************************************************************************** var x = undefined; alert("Test 9.1: " + (this['x'] === x)); alert("Test 9.2: " + (this['x'] === undefined)); alert("Test 9.3: " + this.hasOwnProperty('undefined')); // ****************************************************************************** function B(arg) { this.a = arg; } B.prototype = {a: 1}; Ba = 4; var m = new B(3); var j = new B(); alert("Test 10: " + ma + ja); // ******************************************************************************
      
      







更新:

質問への回答+コメント:

表示する
テスト1.1:機能

配列は、javascriptのすべてのクラスのような関数です。

テスト1.2:オブジェクト

プロトタイプ関数はオブジェクトです

テスト1.3:機能

pushはプロトタイプで定義されたArrayメソッドです



テスト2.1:false

空の文字列はfalseに変換されます

テスト2.2:真

ブール値への変換時にnullおよびundefinedの両方がfalseを与える

テスト2.3:真

!! n = false、n(空の文字列)もfalse



テスト3:偽

{} .a-未定義、{} .b-未定義。 彼らは等しい



テスト4:未定義

Ca = 2は、コンストラクターCに新しいメンバーを作成しません。したがって、オブジェクトC aで定義されていません。



テスト5:false

s.prototypeは気を散らすものです。 プロトタイプは、コンストラクター(関数)でのみ機能します。 したがって、sbは未定義です。

そして、ここにサブマークがあります-0と未定義は等しいですか? いいえ、等しくありません。



テスト6.1:未定義

関数Aにはプロパティaがありません。

テスト6.2:4

コンストラクタAでxを作成すると、プロパティaは4になりました。コンストラクタの引数は無視されました。



テスト7:未定義

func関数では、未定義のゼロ以上、以下に注目しました。 どの条件も当てはまりません。 3つすべてが機能しない場合。 未定義を返します。

ところで、これは良いキャッチです。 プログラムに入ったら。



テスト8:ReferenceError:NANは定義されていません

これは、tst> NANをチェックするときに例外をスローします。 NANは未定義の文字です(NaNとは対照的)。

ところで、tst> window.NANを比較するとき、例外は発生しませんでした。



テスト9.1:真

変数xはグローバルコンテキストで作成されました-つまり 彼女は窓のメンバーです。 関数を実行するとき、this = window。 つまり、この条件は真です。

テスト9.2:true

はい、window.xは未定義です。

テスト9.3:true

興味深い点があります。 本当に未定義とは何ですか? これは変数window.undefinedです。 ブラウザの以前のバージョンでは、オーバーライドできました。



テスト10:3未定義

変数mはクラスBのインスタンスとして作成されます-数値3がコンストラクターに渡されますmのプロパティaはコンストラクターで3に設定されます。

jの場合、arg = undefinedがコンストラクターに渡されます。 したがって、プロパティaは同じです。






All Articles