3 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
ECMAScript 5及更高版本(第201頁(yè) - JSON對(duì)象,偽代碼頁(yè)面205)中定義的函數(shù)JSON.stringify()在對(duì)象上可用時(shí)使用函數(shù)toJSON()。
因?yàn)镻rototype.js(或您正在使用的另一個(gè)庫(kù))定義了一個(gè)Array.prototype.toJSON()函數(shù),所以首先使用Array.prototype.toJSON()然后使用JSON.stringify()引用的字符串將數(shù)組轉(zhuǎn)換為字符串,因此數(shù)組周?chē)囊?hào)不正確。
因此,解決方案是直截了當(dāng)且簡(jiǎn)單的(這是Raphael Schweikert答案的簡(jiǎn)化版本):
delete Array.prototype.toJSON
這產(chǎn)生了對(duì)依賴(lài)于數(shù)組的toJSON()函數(shù)屬性的庫(kù)的副作用。但考慮到與ECMAScript 5的不兼容性,我發(fā)現(xiàn)這是一個(gè)小小的不便。
必須注意的是,ECMAScript 5中定義的JSON對(duì)象在現(xiàn)代瀏覽器中有效實(shí)現(xiàn),因此最佳解決方案是符合標(biāo)準(zhǔn)并修改現(xiàn)有庫(kù)。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
一個(gè)不會(huì)影響其他Prototype依賴(lài)的可能解決方案是:
var _json_stringify = JSON.stringify;JSON.stringify = function(value) { var _array_tojson = Array.prototype.toJSON; delete Array.prototype.toJSON; var r=_json_stringify(value); Array.prototype.toJSON = _array_tojson; return r;};
這會(huì)處理與JSON.stringify不兼容的Array toJSON,并且還會(huì)保留toJSON功能,因?yàn)槠渌鸓rototype庫(kù)可能依賴(lài)于它。
添加回答
舉報(bào)