31

私は、集中力を失い、ばかげた質問に疑問を抱き始めた瞬間の1つに出くわしました。

var a = {
  b: "value"
}

typeof 'b' とは何ですか。typeof の「値」という意味ではなく、b というラベルが付けられた実際のキーですか?

背景:文字列であるキーを作成しなければならなかったとき、私はこれについて疑問に思い始めました:

var a = {
  "b": "value"
}

後で次のように参照されるためです。

a["b"]

そして、元の質問を疑問に思ってしまいました。

4

5 に答える 5

33

オブジェクト リテラルの用語でbは、プロパティです。プロパティは、JavaScript の文字列または記号のいずれかですが、オブジェクト リテラル内でプロパティ名を定義する場合は、文字列の区切り記号を省略できます。

for (key in a) {
    alert(typeof key);
    //-> "string"
}
于 2010-08-31T10:53:01.833 に答える
23

プロパティ名は自動的に文字列に変換されます。プロパティ名として数値リテラルを使用して、これを自分で試すことができます。

var object = {
  .12e3: 'wut'
};
object[.12e3]; // 'wut'
object['.12e3']; // undefined
object['120']; // 'wut'

// Let’s try another numeric literal:
object = {
  12e34: 'heh'
};
object[12e34]; // 'heh'
object['12e34']; // undefined
object[1.2e35]; // 'heh'
object['1.2e35']; // undefined
object[1.2e+35]; // 'heh'
object['1.2e+35']; // 'heh'

このため、プロパティ名には文字列リテラルのみを使用することをお勧めします。

Unquoted property names / object keys in JavaScriptから、この件に関する私の記事:

プロパティ名が数値リテラルまたは有効な識別子名である場合にのみ、引用符を省略できます。

[…]

ブラケット表記は、すべてのプロパティ名に安全に使用できます。

[…]

ドット表記は、プロパティ名が有効な識別子名である場合にのみ使用できます。

また、特定のプロパティ名を引用符なしで、および/またはドット表記で使用できるかどうかを通知するツールも作成しました。Mothereff.in/js-propertiesで試してみてください。

スクリーンショット

于 2012-03-05T17:56:17.143 に答える
4

JavaScript オブジェクトはハッシュ テーブルであり、キーは単なる文字列であることに注意してください。宣言時にプロパティ名を囲む引用符を省略できますが、プロパティ名に予約語を使用したり、数字で始まる、またはスペースを含むなど、たまたま無効な識別子になる他の名前を使用する場合は、プロパティをラップする必要があります。引用符で囲まれた名前:

var a = {
  "1b":       "value",
  "b and c":  "value",
  "+12345":   "value"
};

また、宣言時に引用符が使用されたかどうかに関係なく、ドット表記または添字表記を使用してオブジェクトのプロパティを参照できることに注意してください。ただし、上記の例のように、無効な識別子となるプロパティ名を使用する場合は、添字表記を使用する必要があります。

a.1b             // invalid (dot notation)
a["b and c"];    // valid   (subscript notation)
于 2010-08-31T10:57:53.497 に答える
3

b は文字列です。これは単なる簡略構文なので、次のように記述します。

var a = {
    b: "value"
}

それ以外の

var a = {
  "b": "value"
}
于 2010-08-31T10:51:49.927 に答える