JavaScriptで「:」(コロン)は何をしますか?


178

私はJavaScriptを学習していて、jQueryライブラリを閲覧しているときに:(コロン)がよく使われているのがわかります。これはJavaScriptで何に使用されますか?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };

回答:


247
var o = {
    r: 'some value',
    t: 'some other value'
};

機能的には

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

14
したがって、C#オブジェクトの初期化構文に似ています。ありがとう!
ミカ

囲んでいるオブジェクトがない場合はどうなりますか?
theonlygusti 2014年

@ FranciscI.B推測しなければならないのであれば、それはTypeScriptだと思います。これはJavaScriptのスーパーセットです。これは、型がfloatであるxMinという名前の変数を使用してクラスを宣言しています。それが意味することはかなりシュールです。
Sal_Vader_808

96

また、コロンを使用してステートメントにラベルを付けることができます。例えば

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if(j>50) {
     break outerloop;
   }
  }
i++

}

1
ラベルA((STATEMENT))
Muhammad Umer 2013

4
スパゲッティコードへようこそ:)
レオ・ザ・フォー

後藤は偽装できません。後藤を壊すだけです。そしてあなたはそれを見つけました!;)
Andrew

1
JSラベルのためのMDN参照ページ: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
ピーター

はい、そういうわけでa => {b:2}はスローせず、未定義を返しません
パブロD

70

コロンは三項演算子でも使用されていることを忘れています(jqueryがこの目的で使用するかどうかはわかりません)。

三項演算子は、if / thenステートメントの式形式(式は値を返す)です。これは次のように使用されます:

var result = (condition) ? (value1) : (value2) ;

三項演算子を使用して、if / thenと同様に副作用を生成することもできますが、これは非常に悪い習慣です。


2
別名「三項演算子」。OPはオブジェクトリテラルの大文字と小文字を厳密に尋ねていることに注意してください。OPの要求を超える場合は、コロンもラベルで使用されます。
Ates Goral

14
はい、私はそれを意味しました。そのようなプログラミングの概念を誤って誤認している状況を回避するつもりなら、私は本当にインターネットから離れるべきです。
ブルトン語

ラベルなどに使用されるのは素晴らしいことです。@ AtesGoralを使用しても混乱しないので、今でもまだググっています。
シェーン

多分それはJavascriptで使用されないものをリストする方が簡単でしょう:
kingfrito_5005 2015

45

「:」は基本的にキーと値のペアの区切り文字です。あなたの例では、それはJavascriptオブジェクトリテラル表記です。

JavaScriptでは、オブジェクトはプロパティの識別子とその値を区切るコロンで定義されるため、次のようになります。

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

そしてそれを次のように使用します:

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"

これのサブセットはJSON(Javascript Object Notation)とも呼ばれ、サーバー側の言語でコンパクトかつ迅速に解析でき、JavaScriptはJSON文字列をオブジェクトに簡単に逆シリアル化できるため、AJAX呼び出しで役立ちます。

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');

キーに特殊文字やスペースが含まれている場合は、引用符で囲むこともできますが、操作が難しくなるためお勧めしません。

ことを覚えておいてくださいJavaScriptのオブジェクトリテラル記法 JavaScript言語では、メッセージパッシングのためのJSONの規格と異なっています。2つの主な違いは、関数とコンストラクターはJSON標準の一部ではありませんが、JSオブジェクトリテラルでは許可されていることです。


2
あなたの返答を読んだとき、私はそれを投票するつもりだと思ったが、「JSONとしても知られている」とあなたは言った。オブジェクトリテラルとJSONはまったく同じものではありません。実際、JSONについて言及する前の例は有効なJSONではありません。
nnnnnn

@nnnnnn 2つの違いは非常に微妙ですが、それでも重要です。回答をより具体的になるように更新しました。
ダンハーバート

1
アップデートを見ます。いいね。JSON では、キー名を引用符で囲む必要があることに注意してください。
nnnnnn 2011年

なぜそのすべてを2回言及する必要があるのですか?あなたが「そしてそれを次のように使う」と言ったとき
ハーシャ

17

これは、オブジェクトリテラル構文の一部です。基本的な形式は次のとおりです。

var obj = { field_name: "field value", other_field: 42 };

その後、次のようにしてこれらの値にアクセスできます。

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"

関数を値として持つこともでき、基本的にオブジェクトのメソッドを提供します。

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9

1
それは私に検索してより多くの情報を見つけるための用語を与えてくれたので素晴らしいです。
ジョニー2014年

13

変数内のオブジェクトをリストするために使用できます。また、if文の省略形で少し使用されます。

var something = {face: 'hello',man: 'hey',go: 'sup'};

そしてそれをこのように呼ぶ

alert(something.man);

また、if文:

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}

10

コロンが各「ケース」の後に使用されるswitchステートメントを忘れないでください。


10

これらは一般的に、コロン「:」がJavaScriptで使用されるシナリオです。

1-オブジェクトの宣言と初期化

var Car = {model:"2015", color:"blue"}; //car object with model and color properties

2-ラベルの設定(制御構造とスパゲッティコードが複雑になるため推奨されません)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if(userInput > 10000)
     {
          break List;
     }
}

3-スイッチステートメント

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}

4- 3項演算子

document.getElementById("demo").innerHTML = age>18? "True" : "False";

1
単一のコロンは、の代わりに短絡評価にも使用でき||ます。例:var a = false, b = a || 'Default value';に相当var a = false, b = a : 'Default value';
Shaun Cockerill 2018年

7

それはJSON、つまりJavaScript Object Notationです。これは、オブジェクトまたはハッシュマップをすばやく説明する方法です。コロンの前のものはプロパティ名であり、コロンの後のものはその値です。したがって、この例では、プロパティ「r」があり、その値は変数rの値です。tについても同じです。


3
JSONはJavaScriptオブジェクト初期化構文のサブセットにすぎません。'{a:k()}'(kは関数ではありません)はJSONではありませんが、JavaScriptオブジェクトの初期化構文としてはまったく問題ありません。
yfeldblum 2009年

12
熟考するために、それは「JSON」ではありません。JSONのように見えます。JavaScriptにネイティブであり、コード内に直接表示できるのは、オブジェクトリテラル構文です。一方、JSONはデータのシリアル化/交換形式です。JSONは、「空中」、つまり輸送中、またはまだ実際のオブジェクトに解析されていない場合にのみJSONになります。
Ates Goral

3
Ates Goralの+1。ただし、与えられた例はJSONのようにも見えないことに注意してください。有効なJSON構文になるには、名前を二重引用符で囲む必要があります。
NickFitz

3

少し前に私が行った愚かな間違いの1つは、一部の人々を助けるかもしれません。

このようなイベントで「:」を使用している場合、値は変更されないことに注意してください

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });

したがって、「nub0x」は最初に発生するイベントで初期化され、その値は決して変更されません。ただし、「nub0y」は次のイベントで変更されます。


私はこれに遭遇しました、そして実際にここで起こっているのは、あなたがあなたの陳述の前にラベルを使っているということです。割り当ては行われませんが、ステートメントevent.target.offsetLeft + event.target.clientWidth/2;はondragメソッドが呼び出されるたびに実行されますが、値を決して割り当てませんnub0x
kketch

実際、これは評価として使用されており、で:あるかのように扱われてい||ます。したがって、event.target.offsetLeft + event.target.clientWidth/2;提供されるのnub0xはfalseに等しい場合にのみトリガーされます。
Shaun Cockerill、2018年

1

JavaScriptでのコロンのもう1つの使用法は、変数の名前を変更することです。

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
const { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";

これは、コードで名前を変更する厄介な/長い変数名を持つ値を返すサードパーティライブラリを使用する場合に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.