12

私はライブラリを作成しています。ClosureCompilerの出力の結果を調べて、それがどのように機能しているかを確認することがよくあります(単体テストはありますが、コンパイルされたコードを見て、圧縮を改善するためのヒントを確認したいと思います)。

それで、私はこれまで見たことのない非常に奇妙なコードを見つけました。

variable : {
    some();
    code()
}

注:これはオブジェクトリテラルではありません!また、それ条件付き?にする場所はどこにもありません。?:
そのコードは通常の機能ブロックIIFE)にあります。

variableこの場合、は未定義の変数です。それをtrue、false、または何でもするコードはありません。念のためにconsole.log、そこにを入れて、実際にを取得しReferenceErrorます。

私もIE8でコードをテストしているので、これは最新のブラウザーだけではないことに注意してください。これは、標準の単純な古いjavascriptのようです。

それでは、それを試してみましょう。Chromeのコンソールを起動すると、次のようになります。

undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')}               // same thing.
falseValue:{console.log('and this?')}                     // same thing.

しかしその後...

(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :

...と...

so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .

それで、それは何をしますか?

thisThing:{console.log('is used to declare a variable?')}
thisThing // ReferenceError: thisThing is not defined

このコードが何を意味するのか、少なくともそれが何をするのかを誰かが私に説明してくれたら、私はそれが大好きです。

4

5 に答える 5

8

ラベルです

breakまたはcontinueステートメントを使用して参照できる識別子を持つステートメントを提供します。

たとえば、ラベルを使用してループを識別し、次にbreakステートメントまたはcontinueステートメントを使用して、プログラムがループを中断するか、実行を続行するかを示すことができます。

あなたがそれを見るもう一つの一般的な場所は、人々がjavascript:イベントハンドラーに素晴らしくて役に立たないことに固執するときです。

于 2012-12-13T20:42:52.790 に答える
2

これは、ラベル(コロンで終わるビット)とそれに続くブロック(中括弧で囲まれたコード)です。

ブロックは通常、のような制御ステートメントの後に続きますif(...) { /*block*/ }が、例のように、単純に独立することもできます。

ラベルcontinueを使用すると、またはbreak;を使用して一度に複数のループをジャンプできます。次のようないくつかの例については、リンクされたMDNページを参照してください。

var itemsPassed = 0;
var i, j;

top:
for (i = 0; i < items.length; i++){
  for (j = 0; j < tests.length; j++)
    if (!tests[j].pass(items[i]))
      continue top;
  itemsPassed++;
}

これは、外側のループにエスケープtop:するために、内側のループ内のコードがジャンプできるラベルです。

于 2012-12-13T20:43:40.743 に答える
0

JSONが何であるかを知らず、実際にオブジェクトである可能性のあるものにコロンが表示され、それが何であるかを理解しようとしてこの議論を見つけようとしている人のために、JSONでもコロンが使用されます。JSONオブジェクトに関数を埋め込む方法があります。これを初めて見た人にとっては、これは(私にとっては)混乱を招く可能性があります。(誰もがJSONとJavaScriptの知識を頭の中にプログラムして生まれているわけではありません。)したがって、このディスカッションに参加し、JavaScriptでコロンを見るたびに、それがラベルであると思う場合は、そうではない可能性があります。 。ラベルの後のコロンであるか、JSONの一部である可能性があります。実際、文字列として表示されるJSONのコロンは、ラベルよりもはるかに一般的です。オブジェクト形式のJSONは、次のように表示されます[object Object]、すべてのコンテンツが非表示になっています。したがって、JSONが文字列の形式でなく、オブジェクトをコンソール(console.log(object))に表示しない限り、表示されるのは。だけです[object Object]。オブジェクトにラップされたJavaScriptコードを作成するのが一般的な方法です。その場合、JSONがコード形式で表示されます。そのとき、「これは何ですか?そしてそのコロンは何のためにあるのですか?」と自問します。次に、このディスカッションに参加し、実際にJSONの一部である場合は、ラベルであると言われます。このディスカッションのトピックは、「javascriptでのコロンのこの使用法を説明してください」という言葉で表現され、「正解」はラベルに関係しているとマークされます。正解は、コロンは複数の方法で使用できるということです。したがって、JSONが何であるかわからない場合、または知っていると思う場合(私が行ったように、 JSON.org

于 2014-06-30T17:44:46.090 に答える
-1

それはただのlabelです。

continue [label name]ループ内で(または)を使用breakしてラベルに移動できます。

それらが何であるかについてのより多くの説明は、インターウェブ全体で見ることができます。

于 2012-12-13T20:40:16.460 に答える
-1

jsvascriptのステートメントにラベルを付けるために使用されます。詳細については、こちらを確認してください。

breakラベル付きステートメントは、以降で使用できますcontinue

于 2012-12-13T20:43:11.347 に答える