JSON.stringify()是否会改变元素顺序

2023-02-03 12:44:23 +08:00
 unt

一般情况下是不会的,但是不同浏览器、引擎、内核可能会有差别吧。

请问什么情况下顺序会乱?

如何保证顺序的准确性?

1896 次点击
所在节点    程序员
8 条回复
churchill
2023-02-03 12:59:09 +08:00
如果序列化的对象是 Array ,那肯定是正确排序的。
如果你说的是对象的 property ,现代浏览器上也是确定的
这里有个讨论
https://github.com/mdn/content/issues/16583
lmshl
2023-02-03 13:06:16 +08:00
来自 tc39 ECMAScript Language Specification # sec-json.stringify
你可以永远相信标准浏览器中的实现
unt
2023-02-03 13:07:39 +08:00
@churchill #1 正常业务都是复杂的,比如说:
{key:"ctrl",data:[{key:'key1',value:{a:1,b:2}},{key:'key2',value:{a:1,b:2}}]}
676529483
2023-02-03 13:23:14 +08:00
和 json 库没关系吧,本质是迭代器返回的顺序是否是固定的,这个不同语言不同对象不一样吧
dog
2023-02-03 13:44:52 +08:00
有个小坑:chrome 控制台看到的 object 不一定跟 json 一样
codewld
2023-02-03 13:46:32 +08:00
```javascript
let obj = {a: 1, b: 2}
let obj2 = {b: 2, a: 1}
console.log(JSON.stringify(obj), JSON.stringify(obj2))
// {"a":1,"b":2} {"b":2,"a":1}
console.log(JSON.stringify(obj, ['a', 'b']), JSON.stringify(obj2, ['a', 'b']))
// {"a":1,"b":2} {"a":1,"b":2}
```
whileFalse
2023-02-03 15:42:25 +08:00
不建议依赖这种特性 如果对属性的顺序敏感,可以像楼上说的那样通过数组存储
izumiiAoba
2023-02-03 21:51:18 +08:00
stackoverflow.com/questions/16167581
用 `JSON.stringify` 第二个参数,可以实现按顺序

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/912847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX