ホームページ >ウェブフロントエンド >jsチュートリアル >もう一つのJavaScriptクイズ(コード集)_JavaScriptスキル

もう一つのJavaScriptクイズ(コード集)_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:04:241085ブラウズ

この分野の知識レベルをテストできます。
質問の最後には、元のブロガーの記事とコメントを参照した私のトピックの分析があり、誰もが答えを得るために競い合っています。
クイズ:
1:
1 && 3
2:
1 && "foo" || 0
3:
1 || "foo" && 0
4:
(1,2,3)
5:
x = {shift:[].shift};
x.shift(); >6:
{foo:1}[0]
7:
[true, false][true, false]

8:
'52'.split(' ')[0]
9:
a: b: c: d: e: f: g: 1, 2, 3, 4, 5;
10:
{a: 1, b: 2}[["b"]]

1
"b" 45
12:
{a:{b:2}}
13:
(function(){}())
14:
[1,2,3,4,5][0..toString.length]

15:
({} 'b' > {} 'a')

16:
Number.prototype.x = function(){ return this === 123 }; ;
17:
Array(2).join()
18:
vars: var vars = vars;
19:
{ foo = 123 }
20:
x = 1; (function(){return x; var x = 2;}())

2
削除

22:
RegExp.prototype.toString = function() {return this.source};
23:
{break;4;}
24:
'foo' == new function(){ return String('foo') };

25:
'foo'.split('') []

分析:

1: #1。 //3: 1 は true で、&& 演算は右側の式を実行し続け、結果は 3
2: #2。 : 論理演算子、上記と同様、演算が「foo」に達すると、式は成功し、|| の右側の式は実行されなくなります。
3: //1: 1 が変換されます。 bool で true、直接返されます。no 次に、
4: #4 を実行します。 //3: 常に最後の値
5: #5 を返します。メソッドでは、x は length 属性を持ち、戻り値は 0 です。
6: #6。 //[0] : 2 つの式、最後の式の結果を返します。
7: //true。 : ブール値を演算し、結果は 1 または 0 で [true,false][1,0] となり、この式は常に最後の値 [true,false][0]
8: #8 を受け取ります。 6: 演算子優先度レベルは演算子 '52'.split('')->['5','2']; take [0] to get 6
9: #9。 /5: 先頭を無視します。すべて :x が取得します: a:1,2,3,4,5 結果: 5
10: //構文エラー。おそらく、このデータは json 形式ではないのでしょうか?実際、これは JavaScript オブジェクトではなく、ブロックレベル構造のステートメント実行であることに最初は非常に驚きました。代入ステートメントがないからです。通常のステートメントとして実行すると、{a:1;b:2} が正しくなります。または a={a:1,b:2}
11: #11。 //"b45": 文字列と数値の加算は常に文字列
12: #12: 2 つのステートメントだけです。実際には質問 9 a:b:2, return 2
13: #13 と同じ状況です。 return ステートメントが表示されないため、匿名の空の関数が自動的に実行され、自動的に unknown が返されます。
14: #14: これはとても興味深いですね。これについては 2 つのパートに分けて説明します。最初に 0..toString について説明します。整数の後に「.」を追加すると、JavaScript はそれが属性呼び出しのポイントではなく、浮動小数点数のポイントであると認識します。属性呼び出しのポイント。今回は JavaScript ではユーザーが何をしたいのかを区別できません。つまり、0.. が呼び出し属性になります(これは私の推測です) このとき、0. はオブジェクトに変換され、その toString 関数が呼び出されます。 0.toStringを直接使用すると構文エラーが発生します。 1.1.toString;.0.toString などをテストでき、それらはすべて呼び出し可能です。 0..toString.length: 1 の結果について話しましょう。なぜ 1 なのでしょうか? 関数の length 属性を呼び出して返される結果は、関数の仮パラメータのデフォルトの数です。 JavaScriptの.toString関数は1です。したがって、[1,2,3,4,5][1] の結果は 2 になります。
15: #15. //true: {} "b" オブジェクトと文字列が追加されます -> "[オブジェクト オブジェクト]b"、その後論理比較が実行されます ("b" > "a")。 {} "b" を直接テストしないでください。

が返されるのはなぜでしょうか。その場合、最初に {} ステートメント ブロックを実行してから、結果は当然 NaN になります。

16: #16. //false 厳密な比較、左側にオブジェクト、右側に数値、型が一致しません。
17: #17. //'','': joinを使用して配列を文字列に変換しますが、空の配列なので上記の結果が得られます。
18: #18. //未定義: どれも塩辛、どう転んでも塩辛です。それらはすべて未定義であり、もちろん最終的にはまだ未定義です。
19: //123: ステートメントの実行をブロックします。彼女はパートナーのシェンマと少し関係があります。
20: #20. //未定義: JavaScript がブロック スコープを導入するたびに、ブロック スコープ内の「var」をスキャンし、var life を持つ変数の値を未定義に設定すると言われています。関数本体を含むクラス宣言は以前に行われています。
21: #21. 髪の毛を削除します。削除できますか? [delete は、プロパティを削除できない場合にのみ false を返します。]

参考: http://perfectionkills.com/ Understanding-delete/ この記事では、組み込み関数の一部のプロパティを削除できないことが明確に示されています。引数、

length、関数のローカル変数 (function(){ var a = 1; return delete a })() など。

22: #22. //1: まず、正規表現のプロトタイプ チェーンの toString 関数を変更して、現在の正規表現インスタンス オブジェクトのテキスト形式を返します。このとき文字列は自動的に数値に変換されて計算されます。23: #23. // 構文エラー: ブレーク ステートメントはループと switch ブランチ ステートメントのみに配置できます。 24: //false: Damian Wielgosik の非常に古典的な説明を借用します (new function(){ return String('foo') ; }).toString() != 'foo'
25: #25. //"f,o,o": 文字列を配列に変換した後、配列に追加して文字列に変換します。 Damian Wielgosik の説明を借りて、配列を追加してみます

たとえば [1, 2] [3, 4] を検討して、配列がどのように文字列にキャストされるかを確認してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。