1

次のコード サンプル (Mozilla の開発者サイトから) を検討するときに、JavaScript のオブジェクト リテラルの構文を理解するのに苦労しています。

var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };

console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda

JavaScript オブジェクト リテラルに関する私の現在の理解は次のとおりです。キーを単なるテキストとして指定すると、キーに関連付けられた値に設定された変数が 'car' に定義されます。ただし、上記で"b"は、 は文字列ですが、 に設定された変数であるかのように呼び出すことができcar.manyCars.bます。また、有効な構文であり、 を返します。"Jeep"car.manyCars["b"]"Jeep"

オブジェクトリテラルを宣言したときに実際に何が起こるかについて、誰かが明確な説明をしてくれるかどうか疑問に思っていました。明らかに私の現在の理解は完全ではないからです。

4

3 に答える 3

7

JavaScript では、オブジェクト リテラル表記のキーは、引用符で囲まれているかどうかにかかわらず、文字列として扱われます。したがって、これで:

var car = { manyCars : {a: "Saab", "b": "Jeep"}, 7: "Mazda" };

次にこれを行う場合:

for (var k in car) { console.log("key: " + k + " (type: " + typeof(k) + ")"); }

出力は次のようになります。

key: 7 (型: 文字列)
key: manyCars (型: 文字列)

(明らかに) 数字キー7も であることに注意してくださいstring。JavaScript キーワードをオブジェクト リテラルのキーとして使用することもできます。

キーで値にアクセスする場合、ルールはより厳格になることに注意してください。たとえば、キーが予約語の場合は、添字表記と引用符を使用する必要があります。また、オブジェクト リテラルのベア キーは (数値リテラルでない場合) 有効な JavaScript 識別子名でなければならないため、スペース、コンマ、または JavaScript 演算子 ( 、 など) を含めることはできませ+=

于 2013-07-15T04:34:00.747 に答える
2

JavaScript オブジェクトでは、リテラルはキーと値のペアで構成されています。JavaScript のキーは常に文字列ですが、値は任意のデータ型にすることができます。

JavaScript は、キーを定義するためのシンタックス シュガーを提供します。たとえば、文字列リテラルとは異なり、キーを引用する必要はありません。したがって、次の 2 つの例は同等です。

{ x: 0 }   // example 1
{ "x": 0 } // example 2

ただし、このシンタックス シュガーは、間に空白 (スペース、タブ、改行など) がない識別子に対してのみ機能します。たとえば、次は JavaScript では無効です。

{ a property: 0 } // whitespace not allowed in identifiers

ただし、識別子を引用することで、この制限を回避できます。

{ "a property": 0 } // valid

trueブール値 (またはfalse)、数値リテラル、undefinedおよびnullをキーとして使用することもできます。ただし、文字列に強制されることに注意してください。したがって、次のことができます。

var o = {
    undefined: 1,
    null: 2,
    true: 3,
    false: 4,
    0: 5
};

次に、次のようにアクセスできます。

alert(o.undefined); // 1
alert(o.null);      // 2
alert(o.true);      // 3
alert(o.false);     // 4
alert(o[0]);        // 5

最後のステートメントは重要です。数値リテラル自体は、有効な識別子として分類されません。[]したがって、ドット表記 ( ) の代わりに配列ブラケット表記 ( ) を使用.してアクセスする必要があります。

JavaScript のすべてのキーは文字列であるため、次のようにすることもできます。

alert(o["undefined"]); // 1
alert(o["null"]);      // 2
alert(o["true"]);      // 3
alert(o["false"]);     // 4
alert(o["0"]);         // 5

ただし、オブジェクト、配列、または関数をキーとして使用することはできません。たとえば、次は無効です。

{ {1: 2}: 3 }            // objects can't be used as keys
{ [1]: 2 }               // arrays can't be used as keys
{ function () {}: true } // functions can't be used as keys

オブジェクトリテラルについて知っておく必要があるのはこれだけです。

于 2013-07-15T04:58:57.047 に答える
0

基本的に、JavaScript のオブジェクト リテラルはディクショナリと非常によく似た動作をしますが、Java または PHP のオブジェクトの機能も備えています。オブジェクトは、またはプロパティ、あるいはその両方で定義された関数を持つことができます。アクセスしようとしているキーに応じて、引用符またはドット構文を使用できます。一部に特殊文字が含まれている場合は、引用符を使用し、特殊文字がない場合はドットを使用します。どちらも正しいです。

これは、オブジェクト リテラルの作成とコンストラクターによるオブジェクトの作成の違いを比較対照する便利なリソースです。

http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-directional-javascript/

オブジェクトリテラルの使用についてさらに詳しく説明する別の例を次に示します。

http://javascript.info/tutorial/objects

于 2013-07-15T04:36:08.010 に答える