2009-04-07 6 views
6

ほとんどのJSONシリアライザ/デシリアライザでは、JavaScriptの辞書/ハッシュ配列の「キー」部分が文字列として書き込まれます。JS hash/dictの「キー」部分が文字列であるのはなぜですか?

目的の名前を入力するのではなく、文字列をキーとして使用する利点は何ですか?例えば

、私はそうのような二つのオブジェクト​​とk2を定義すると言う:

var k1 = { a: 1, b: 2, c: 3 };   // define name normally 
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string 

そして私は、次のテストを実行しました:

alert(k1 == k2);     // false (of course) 

alert(k1.a == k2.a);    // true 
alert(k1["b"] == k2["b"]);   // true 

alert(uneval(k1));     // returns the k1 object literal notation. 
alert(uneval(k2));     // returns the same string as above line. 

alert(uneval(k1) == uneval(k2)); // true 

だからキーがであること持っていることのポイントは何ですか​​のようにキー名を入力するのではなく、k2というように二重引用符(文字列)を定義しましたか?


私はちょうどAaron Boodman's blog entryを指すAjaxianでこれ以上のを見ました:

chromium.tabs.createTab({ 
"url": "http://www.google.com/", 
"selected": true, 
"tabIndex": 3 
}); 

彼はまた、tabIndexのためのキャメルケースを使用しているので、私は全くの文字列を使用して任意のポイントが表示されません。

なぜ:

chromium.tabs.createTab({ 
url: "http://www.google.com/", 
selected: true, 
tabIndex: 3 
}); 

JS忍者は、文字列にurlselectedtabIndexを回すの規則に従いますなぜ?

答えて

6

JSONは実際のJavaScriptリテラル構文のサブセットです。 JSONパーサの実装を簡単にするために、文字列の周りには常に二重引用符が必要です.JSONのキーは文字列なので、そこに必要です。

すべての合法的なJavaScriptが合法的なJSONであるわけではありません。 JavaScriptでオブジェクトリテラルを引用符なしで定義することはできますが、相互運用可能なJSONが必要な場合は、それらを配置する必要があります。

+0

javascriptの規約がJSONの多くで作業していることから流出したとします。 – chakrit

+0

Pythonの互換性が引用の理由として言及されています。 – cobbal

+0

@chakritはい。また、ギズモで指摘されているように、JavaScriptで引用符を使用することは、予約語を心配する必要がないため、一般的に安全です。たとえば{do: "something"}は法的JavaScriptではありません。 –

1

このようにすると、たとえばdoのようなjavascript予約キーワードをエラーで使用することは避けられます。文字列表記を使用すると、あなたは安全な側にいました。

0

json.orgのシンタックスダイアグラムを信じる場合、barewordのプロパティ名は非標準です。テストを実行したブラウザの数はいくつですか?スペース、コロン...なぜあなたはそれを行うだろう

本当にわからないを含む - は別に離れて、あなたが実際にあなたのプロパティ名にどんな文字を使用することができます予約キーワードからなってから

+0

大したことはありませんが、仕事では巨大なjavascriptアプリケーションを維持します。そして、私は常にクラス名などを作成し、すべての主要なブラウザで動作します... IE FF Opera Safari。 – chakrit

+0

JSONはJavaScriptのサブセットです。引用符が必要ですが、JavaScriptは必要ありません。 –

0

。私は、通常の "オブジェクト"表記を使用する方が好きです。

関連する問題