Since properties order in objects is not guaranteed in JavaScript, how does JSON.stringify() actually behave?
- Is the following always true (same object)?
const o = { a: 1, b: 2 };
console.log(JSON.stringify(o) === JSON.stringify(o));
- Is the following always true (deeply equal objects, same key declaration order)?
console.log(JSON.stringify({ a: 1, b: 2 }) === JSON.stringify({ a: 1, b: 2 }));
- How to make the following be true (deeply equal objects, different key declaration order)?
console.log(JSON.stringify({ a: 1, b: 2 }) === JSON.stringify({ b: 2, a: 1 }));
I looked at the ECMAScript standard for
JSON.stringify
: http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3This seems informative:
The "append" in the final step strongly implies that the results are ordered per the source, and I can confirm your code assertions pass on both Chromium and Firefox.
EDIT: For "P of K", this might be relevant too:
It seems that your assertions are true so long as the comparisons are kept in one browser.