Javascript 在具有相同上下文的两个对象上调用JSON.stringify(obj)是否总是得到相同的字符串?

Javascript 在具有相同上下文的两个对象上调用JSON.stringify(obj)是否总是得到相同的字符串?,javascript,json,javascript-objects,stringify,Javascript,Json,Javascript Objects,Stringify,例如,我不关心obj的实际顺序,我只想知道具有相同上下文的对象是否会与stringify具有相同的字符串结果。我的问题是,假设有两个不同的对象,但具有相同的键和值: 功能检查(v1、v2){ 返回JSON.stringify({ a:v1, b:v2 })==JSON.stringify({ 答:1,, b:2 }); } 控制台日志(检查(1,2))因为您正在硬编码位置和值,所以这是可靠的。是的,不管发生什么,检查(1,2)总是返回true 再加一句。如果要检查多个键,这将不起作用。但在你的

例如,我不关心obj的实际顺序,我只想知道具有相同上下文的对象是否会与stringify具有相同的字符串结果。我的问题是,假设有两个不同的对象,但具有相同的键和值:

功能检查(v1、v2){
返回JSON.stringify({
a:v1,
b:v2
})==JSON.stringify({
答:1,,
b:2
});
}

控制台日志(检查(1,2))因为您正在硬编码位置和值,所以这是可靠的。是的,不管发生什么,
检查(1,2)
总是返回
true


再加一句。如果要检查多个键,这将不起作用。但在你的情况下,这并不适用。所以你可以继续<代码>:)

不。这不太可靠。正如您指出的,这种方法存在缺陷。但在您的情况下,是的。无法保证属性的枚举顺序。大多数浏览器都按插入顺序列出属性,数字字段可能除外,因此如果对象是以相同的方式创建的,就可以了。然而,从技术上讲,它仍然依赖于未指定的行为,如果某个疯狂的浏览器决定每次洗牌属性,这不会违反规范。您真的应该编写
函数检查(v1,v2){返回v1==1&&v2==2;}
。如果您觉得有效,您愿意接受这个问题的答案吗,不是真的,不管怎样。。。不过你是对的。除非您编写一些时髦的代码,否则在所有正常情况下它都会返回
true
:P