2012-02-20 7 views
11

、あなたはこのようなオブジェクトを定義することができます引用符で囲まれていないJavaScriptオブジェクトのリテラルキーのルールですか? JavaScriptでは

var d = {1: 'test'}; 

をし、私はこのような負の数のインデックスとキーを設定することができます。

d[-1] = 'test2'; 

が、私は負の数を使用しようとした場合リテラルの初期化でエラーが発生します。

var d = {1: 'test', -1: 'test2'}; 
Uncaught SyntaxError: Unexpected token - 

なぜですか?リテラルな負の数をオブジェクトのキーとして使用できないのはなぜですか?リテラルとして初期化するための回避策がありますか?代わりに文字列を使うことができますが、整数を使いたいと思います。

+0

引用符を使用「-1」:「test2は」 –

答えて

15

、テーマに関する私の書き込みアップ:

Quotes can only be omitted if the property name is a numeric literal or a valid identifier name .

[…]

Bracket notation can safely be used for all property names.

[…]

Dot notation can only be used when the property name is a valid identifier name.

-1は数値リテラルではありません、それは数値リテラル(1)が続く単項-オペレータです。

また、指定したプロパティ名を引用符なしで使用するか、ドット表記で使用できるかどうかを示すツールを作成しました。それをmothereff.in/js-propertiesで試してみてください。以下のようなプロパティ名の前後

Screenshot

+0

"単項演算子"を意味すると思います。 –

+0

@GGGタイポが修正されました、ありがとう! –

+0

あなたのツールは、 '-1'と' + 1'は、実際には動作しませんが、引用されていないプロパティ名として使用できると主張しています。 –

3

これは-1が有効な変数識別子ではないためです。引用符で囲まれている場合、キーワードであるか、他の理由のために、通常の識別子することはできません

+0

しかし、私はまだので、これはキーが有効な変数名である必要はありリテラル構文の制限です、後でキーで割り当てることができます? – jterrace

+0

正しい。 hteオブジェクトの単なる表現です。 –

+3

@jterrace、@Daniel:オブジェクトイニシャライザのプロパティ名は、文字列リテラルと数値リテラル(識別子名だけでなく)でもかまいません。しかし明らかに、 '-1'は数値リテラルではありません:http://es5.github.com/#x7.8.3 –

3

変更

var d = { 1: 'test', '-1': 'test2'}; 

識別子は、まだ使用することができます。

+0

「1」は識別子としても使用できません...ただ言って;) –

1

私は正確な理由はわからないが、あなたはオブジェクト初期化子で負の数を引用する必要があります。あなたはどちらか使用して、このキーに対応できるように、すべてのオブジェクトのキーは、内部的に文字列として扱われ

var d = {1: 'test', '-1': 'test2'}; 

を:

キーは特定の文字が含まれている場合、あなたはこのような引用符でそれを配置する必要があり
d[-1] or d['-1'] 
4

興味深い質問です。

事は、あなたがやってこれを確認することができ

var d = {24: 'foo'}; 

var d = {"24": 'foo'}; 

を入力間に違いはありません、である:それは唯一の「24を持っていることを

var d = {24:'foo', "24":'bar'}; 

お知らせ(厳密なモードでは失敗します)。

これはなぜ引用符なしで-1を行うことができないのか説明していませんが、うまくいけば「-1」も同様です。

興味深いことに、引用符で囲まれていない小数はうまく機能しているようです。

編集:Felix Klingは、他の回答のコメントではうまくいかない理由を説明しています。 -1は数値リテラルではなく、数値リテラルと単項演算子のある-の式です。したがって、オブジェクトキーとしては適していません。Unquoted property names/object keys in JavaScriptから

関連する問題