2017-01-30 6 views
-1

多くの質問がJavaScriptオブジェクトは、

obj = {"foo" : "bar"} 

obj = {foo: "bar"} 

違い何尋ねると、答えはノー引用符はJavascriptシンタックスシュガーではありませんしながら、引用符が適切なJSONの構文であるということです。引用されたキーを施行します

semi = { "foo" : "bar", hello: "world"} 

と完全に引用されたオブジェクトすなわち戻る:JavaScriptで

fully = { "foo" : "bar", "hello": "world" } 

を私の質問は、私は任意の引用符で囲まれていない/半引用されたjavascriptオブジェクトつまりを取ることができる方法、です。 JSON.stringify()は文字列を返すので、私はまだ普通のJSオブジェクトが必要です。ありがとう!

+0

あなたの目的は何ですか?両方ともjsで同じ方法で解釈されます。それによって私はあなたのセミと完全なオブジェクトがすべてのmesuresで同じであることを意味します。あなたはコンソールで見ることができます –

+0

クォートはプロパティ名にスペースや特殊文字を含まず、数字で始まらない限りオプションです。達成しようとしていることを明確にしない – charlietfl

+1

あなたの質問は意味をなさない。文字列または識別子の使用は、JavaScriptのソースコード内にのみ存在します。あなたがそれらから抜け出すオブジェクトは、プロパティを持つ単なるオブジェクトです。それを構築するために使用される構文は無関係です。元のソースコードをオブジェクトから取得することはできません。 – Quentin

答えて

2

Javascriptインタプリタは、プロパティが表示されているとき、およびダッシュやスペースなどの特殊文字が含まれている場合にのみプロパティを引用します。

Javascriptオブジェクトは、ではありません。 JSONと同じものです。それらは非常によく似ていますが、JSONはJavaScriptオブジェクトの文字列表現ですが、javascriptオブジェクトはプロパティ名を持つ実際のプロパティを持っています。そのため、ドット構文でこれらのプロパティにアクセスできます。

console.log(semi.foo); 

は引用符で文字列表現は、ちょうどあなたの視覚的な利益のためであり、それらは内部的に表現していませんか。

0

JavaScriptオブジェクトのキーは引用符で囲まれた文字列ではありません。単にプリミティブな文字列の値がです。オブジェクトの初期化子は、キーと値のペアを持つオブジェクトを作成し、初期化として

{ unquotedKey: "some value" } 

を使用して、ソースコード内

キー定義。ただし、構文ではunquotedKeyJavaScript identifiersの規則に準拠する必要があります。 のJavaScript識別子の規則に準拠していないことがキーとオブジェクトを作成する手段で

{ "quoted value!": "some value" } 

を使用して、ソースコード内

キー定義。 barは識別子ですが、was hereは識別子ではありませんので、foo["was here"]が配列参照表記を必要とするためfoo.bar作品:速記ドット表記を使用してJavaScriptのプロパティ名にアクセスするとき

同じ制限が適用されます。

JSON.stringifyと入力します。 stringifyメソッドは、システムとプログラミング言語の間のオブジェクトの文字列表現を交換する目的で、デフォルトですべてのプロパティ名を引用しています。 JSON.stringiyの振る舞いから引用符で囲まれた識別子の名前が何らかの形で優れていること、またはプログラマティックアクセス用に設計されたプロパティ名を持つJavaScriptでオブジェクトリテラルを書く正しい方法を推測するのは間違っています。

関連する問題