6

私は、JavaScript で何かを見逃していたのではないかと考えています。

Chromeコンソールでこのコードを試しました:

a = [];
a.name = "test";
JSON.stringify(a); 
// which returns value []
a = new Object();
a.name = "test";
JSON.stringify(a); 
// which returns value {"name":"test"}

違いはなんですか?new Object() は Microsoft JScript のものだと思いましたか? 私は何が欠けていますか?仕様のどこかで何かを見逃しているに違いありません。ありがとう。

4

5 に答える 5

20
a = new Object()

a = []

は同等ではありません。しかし、

a = {}

a = new Object()

それは。

于 2011-05-16T17:42:34.283 に答える
3

new Object()と同等です{}(奇妙な再定義の問題が原因ではない場合を除きますが、今は無視してください)は、プロパティを追加する[]と同等です。JSON は、配列自体への任意のプロパティ割り当てをキャプチャしない特別な方法で配列を文字列化します。new Array().name

于 2011-05-16T17:43:49.617 に答える
1

配列のプロパティを設定nameしても、シリアル化された (JSON 文字列化された) 形式には何も影響しません。配列にエントリを入れません。そのためには、 が必要a.push('test')です。

オブジェクトは Javascript の標準部分です (たとえば、MDC のドキュメントを参照してください)。オブジェクトを作成する通常の方法は を使用しますが{}、これもnew Object()機能します。

そう...

var a = [];
a.push('test');
JSON.stringify(a); //"["test"]"

a = {};
a.name = 'test';
JSON.stringify(a); //"{"name":"test"}"
于 2011-05-16T17:45:13.963 に答える
1

JSON データの場合、配列は数値インデックスを持ち、オブジェクトはキーと値のペアを持ちます。

a = [];
a[ 0 ] = "test";

JSON.stringify(a); // returns value ["test"]
于 2011-05-16T17:42:33.487 に答える
1

はい[]、実際には配列であるオブジェクトを定義するために使用していますが、使用している言語によっては、連想配列ではないため混乱する可能性があります。

デフォルトのオブジェクトはすべて key->data のマップであり、中かっこでインスタンス化されます{}

あなたがした場合

a = {};
a.name = "test";
JSON.stringify(a); 

それはうまくいくはずです。

于 2011-05-16T17:42:43.213 に答える