<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">The definition of the JSON.stringify function (per 15.12.3) defines <i>str</i> and <i>JO</i> such that [[Get]] will be called twice for every serialised property on an object, which may have side effects if the property is a getter.<div><br></div><div>My testing shows that json2.js accesses each property only once, which makes more sense in my opinion as having side effects occur twice for each serialised getter seems odd in of itself, and has the potential to be more efficient. &nbsp;Gecko currently matches the spec in this regard and calls getters twice.</div><div><br></div><div>Another issue is the arguments passed to the abstract operation <i>str</i> when serialising an array when a replacer function is provided. &nbsp;The definition of the abstract operation <i>JA</i> says that <i>str</i> should be called with the arguments ToString(index) and value. &nbsp;While technically this is necessary in order to perform the [[Get]] operation with key on host in the <i>str</i>, it has the effect of implying that when replacer is called the key given passed as an argument, the key should be of type <i>String</i>. &nbsp;Currently no implementation (including json2.js) does this ToString conversion, so i think the specified algorithm needs to be corrected to remove the ToString from this point.</div><div><br></div><div>--Oliver</div><div><br></div></body></html>