0

オブジェクトを文字列化しようとしていますが、期待どおりに動作しない理由がわかりません:

function request(url) {
  this.url = url;
  this.head = [];
}

var r = new request("http://test.com");
r.head["cookie"] = "version=1; skin=new";
r.head["agent"] = "Browser 1.0";
document.write(JSON.stringify(r));

このオブジェクトを次のように文字列化できることを願っています。

{"url":"http://test.com","head":["cookie":"version=1; skin=new", "agent":"Browser 1.0"]}

しかし、私は得るだけです:

{"url":"http://test.com","head":[]}

修正方法は?

4

2 に答える 2

1

r の hide プロパティを連想配列にしたいと思います (PHP のように)。それらは JavaScript には存在しません。配列には、数値でインデックス付けされた値があります。

r.head はオブジェクトなので (配列は JS のオブジェクトです)、それにプロパティを追加できますが、r.head["whatever property name"]="value"JSON.stringify を使用するとこれらのプロパティは JSON にシリアル化されないようですr.head。番号付きインデックス値をシリアル化します。

これを修正するr.headには、JSON.stringify がすべてのプロパティをシリアル化するようにオブジェクトとして定義できます。

function request(url) {
  this.url = url;
  this.head = {};
}

var r = new request("http://test.com");
r.head["cookie"] = "version=1; skin=new";
r.head["agent"] = "Browser 1.0";
document.write(JSON.stringify(r));

コソールで次のコードを実行すると (ブラウザーで F12 キーを押す)、配列がオブジェクトと同じようにシリアル化されていないことがわかります。

var b = [];
b.something=22
console.log(b.something);
console.log(JSON.stringify(b));//=[]
console.log(b.hasOwnProperty("something"))//=true


b = {};
b.something=22
console.log(b.something);
console.log(JSON.stringify(b));//={"something":22}
console.log(b.hasOwnProperty("something"))//=true
于 2013-08-16T07:01:54.310 に答える