JavaScript:指定对象中的属性顺序

时间:2015-03-21 12:16:47

标签: javascript html json

行。我一直在查看提供的答案,它们似乎都非常具体。我需要从一般意义上了解这一点。

问题

我有几个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>

2 个答案:

答案 0 :(得分:2)

Javascript对象 - 就像大多数基本的哈希表数据结构一样 - 无法保证其键的顺序:您不应该依赖于您根据经验观察的任何顺序。如果要以强大,可预测的顺序迭代属性,则必须使用其他一些数据结构来补充对象,例如键的数组。

答案 1 :(得分:1)

  

我想知道是否有一种基本的浏览器通用方法。

没有。如果要确保JSON文本中的属性以定义的顺序输出,则必须创建自己的JSON序列化程序,因为JSON和JavaScript都不会对属性应用顺序。这只是有用的,因为您可以以有意义的方式比较文本;一旦你解析该文本,再次无法保证订单。