行。我一直在查看提供的答案,它们似乎都非常具体。我需要从一般意义上了解这一点。
问题
我有几个JS对象。我使用JSON.stringify来比较它们(看看对象是否“脏”)。
但是,stringify会像在内存中设置的那样完全呈现对象,因此它会采用该对象的属性所处的顺序。
如果删除某个属性,则将其还原,这可能会更改顺序。
我将在一秒钟内展示一个简单的HTML示例。我想要的是 RESTORE 部分看起来与 BEFORE 部分完全相同。
我想知道是否有一种基本的浏览器通用方法。
示例
<html>
<head><title>Test JS</title></head>
<body>
<dl>
<dt><strong><big>BEFORE:</big></strong></dt>
<dd><em><strong>Object A:</strong> <span id="objA1"></span></em></dd>
<dd><em><strong>Object B:</strong> <span id="objB1"></span></em></dd>
<dt><strong><big>AFTER:</big></strong></dt>
<dd><em><strong>Object A:</strong> <span id="objA2"></span></em></dd>
<dd><em><strong>Object B:</strong> <span id="objB2"></span></em></dd>
<dt><strong><big>RESTORE:</big></strong></dt>
<dd><em><strong>Object A:</strong> <span id="objA3"></span></em></dd>
<dd><em><strong>Object B:</strong> <span id="objB3"></span></em></dd>
</dl>
<script type="text/javascript">
var objA, objB;
function setUpObjects ( ) {
objA = new Object;
objB = new Object;
objA.someProperty = 'HIHOWAYA';
objB.someProperty = 'HIHOWAYA';
objA.someOtherProperty = 'JUSTFINETHX';
objB.someOtherProperty = 'JUSTFINETHX';
};
function deleteAProperty ( ) {
delete objA.someProperty;
};
function restoreAProperty ( ) {
objA.someProperty = 'HIHOWAYA';
};
function displayObjects ( inIndex ) {
document.getElementById ( 'objA' + inIndex.toString() ).innerHTML = JSON.stringify ( objA );
document.getElementById ( 'objB' + inIndex.toString() ).innerHTML = JSON.stringify ( objB );
};
setUpObjects();
displayObjects ( 1 );
deleteAProperty();
displayObjects ( 2 );
restoreAProperty();
displayObjects ( 3 );
</script>
</body>
</html>
答案 0 :(得分:2)
Javascript对象 - 就像大多数基本的哈希表数据结构一样 - 无法保证其键的顺序:您不应该依赖于您根据经验观察的任何顺序。如果要以强大,可预测的顺序迭代属性,则必须使用其他一些数据结构来补充对象,例如键的数组。
答案 1 :(得分:1)
我想知道是否有一种基本的浏览器通用方法。
没有。如果要确保JSON文本中的属性以定义的顺序输出,则必须创建自己的JSON序列化程序,因为JSON和JavaScript都不会对属性应用顺序。这只是有用的,因为您可以以有意义的方式比较文本;一旦你解析该文本,再次无法保证订单。