Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:指定对象中属性的顺序_Javascript_Html_Json - Fatal编程技术网

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

JavaScript:指定对象中属性的顺序,javascript,html,json,Javascript,Html,Json,嗯。我一直在看提供的答案,它们似乎都非常具体。我需要从一般意义上了解这一点 问题 <html> <head><title>Test JS</title></head> <body> <dl> <dt><strong><big>BEFORE:</big></strong></dt>

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

问题

<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>
我有几个JS对象。我用来比较它们(看一个物体是否“脏”)

但是,stringify渲染的对象与在内存中设置的对象完全相同,因此该对象的属性以任何顺序出现

如果我删除一个属性,然后恢复它,这可能会改变顺序

稍后我将展示一个简单的HTML示例。我想要的是,恢复部分与之前的部分完全相同

我想知道是否有一个基本的,浏览器通用的方法来做到这一点

示例

<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>

测试JS
之前:
对象A:
对象B:
之后:
对象A:
对象B:
恢复:
对象A:
对象B:
var objA,objB;
函数setUpObjects(){
objA=新对象;
objB=新对象;
objA.someProperty='HIHOWAYA';
objB.someProperty='HIHOWAYA';
objA.someOtherProperty='JUSTFINETHX';
objB.someOtherProperty='JUSTFINETHX';
};
函数deleteAProperty(){
删除objA.someProperty;
};
函数恢复属性(){
objA.someProperty='HIHOWAYA';
};
函数displayObjects(inIndex){
document.getElementById('objA'+inIndex.toString()).innerHTML=JSON.stringify(objA);
document.getElementById('objB'+inIndex.toString()).innerHTML=JSON.stringify(objB);
};
setUpObjects();
显示对象(1);
deleteAProperty();
显示对象(2);
恢复属性();
显示对象(3);
我想知道是否有一个基本的,浏览器通用的方法来做到这一点

不可以。如果要确保JSON文本中的属性按定义的顺序输出,您必须创建自己的JSON序列化程序,因为JSON和JavaScript都不对属性应用顺序。这只有在你能以有意义的方式比较文本时才有用;一旦解析了该文本,顺序就再一次得不到保证

我想知道是否有一个基本的,浏览器通用的方法来做到这一点

不可以。如果要确保JSON文本中的属性按定义的顺序输出,您必须创建自己的JSON序列化程序,因为JSON和JavaScript都不对属性应用顺序。这只有在你能以有意义的方式比较文本时才有用;一旦解析了该文本,顺序就再一次得不到保证

我想知道是否有一个基本的,浏览器通用的方法来做到这一点

不可以。如果要确保JSON文本中的属性按定义的顺序输出,您必须创建自己的JSON序列化程序,因为JSON和JavaScript都不对属性应用顺序。这只有在你能以有意义的方式比较文本时才有用;一旦解析了该文本,顺序就再一次得不到保证

我想知道是否有一个基本的,浏览器通用的方法来做到这一点


不可以。如果要确保JSON文本中的属性按定义的顺序输出,您必须创建自己的JSON序列化程序,因为JSON和JavaScript都不对属性应用顺序。这只有在你能以有意义的方式比较文本时才有用;一旦解析了该文本,顺序就再也不能保证了。

Javascript对象——就像最基本的哈希表数据结构一样——对其键的顺序没有保证:您不应该依赖于经验上观察到的任何顺序。如果要以健壮、可预测的顺序迭代属性,则必须使用其他数据结构来补充对象,例如一个键数组。

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

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

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

这正是我所说的。时限到了我会给你打电话的。谢谢是 啊我确实想知道如何在我的具体实现中避免出现这个问题,但我想知道是否有一种更通用的方法。@MAGSHARE:如果您不必支持漂亮的打印和替换函数,那么定制序列化程序并不难。您可以依靠
JSON.stringify
来获取它的各个部分。奇怪的是,前几天我不得不这么做(代码是受版权保护的,所以我不能分发)