2012-01-09 19 views
5
私はちょうど私がJavaScriptで次の操作を行うことができることに気づいた

...私はしかし、行うことはできません使用コロンJavaScriptで変数名(例:B:C)

a:b:c:d = "happy days"; 
a:b:c = function(text){alert(text);}; 

...

var a:b:c:d = "happy days"; 
// or 
var myObj = {prop:a:b:c:d}; 

どのような状況でもこの構文が動作することは期待していませんでした。私は正常に 'a:b = x'表記を使用すると、何が起こっているのか誰にも分かりますか?

+0

それは特有のことです。私は本当に期待していなかった値をもう一度読むことさえできます。 –

+0

'd =="幸せな日 "' –

+1

'a:b:c:d ="幸せな日 ";'幸せな日 'を 'd'に割り当てます。 'a:b:c:d'にはありません。 –

答えて

4

次のようになります。「文はラベルが付けすることができます。ラベル付きステートメントは、ラベルbreakcontinueステートメントと組み合わせてのみ使用されます。 "ラベルは識別子とコロンで構成されます。だからa:b:c:d = "happy days";は代入文d = "happy days";の前に3つのラベルが付けられているだけで、そのような効果はありません。

14

のECMAScriptのコロンは、あなたが後者をdiscoverdその値からオブジェクトキー

  • インライン条件文
  • ラベル
  • を分離する三つの理由

    • のためにそこにあります。基本的にはaというラベルを作成してからb、次にcというラベルを作成し、最後にグローバル変数dに値を割り当てます。したがって、このため

      a:b:c:d = "happy days"; 
      
      console.log(a); // reference error 
      console.log(d); // "happy days"; 
      

      最も一般的な使用方法は、我々は

      switch(foo) { 
          case 0: break; 
          case 1: break; 
          // etc 
      } 
      

      のようにそれを行うswitch文の中ですが、後にすることもでき、直接「ターゲット」continue文を使用してラベル。それは他の多くの言語でgotoに非常に近く来るとのECMAScript標準を引用

      foobar: 
      for(var i = 0; i < 10; i++) { 
          for(var j = 0; j < 10; j++) { 
           if(j === 2) 
            continue foobar; 
          } 
      } 
      
    +2

    私はこれらがラベルであることに同意しますが、ラベルはswitch文ではなくbreak文とcontinue文の参照点として厳密に機能するように見えるため、 "case x:"はコロンの代わりの使用です。また、完了したい場合は、コロンはインラインswitch文(a?b:c;)でも使用されます。 –

    +0

    @ skier88:そうです、インライン条件を忘れました。 'switch/case'の場合、私はいつもケースがラベルとして扱われていると思っていましたが、私はそれを見ていきます。 – jAndy

    関連する問題