这些对象键总是按顺序排列吗?

时间:2017-12-04 19:27:22

标签: javascript object key

我正在制作多个对象,然后我JSON.stringify。然后我把它们变成哈希。我需要以相同的顺序对所有属性进行字符串化,以便我的哈希值保持一致。例如:

function createObj(index, value, key) {
    var obj = {
        value: value,
        index: index,
        key: key
    };

    return obj;
 };


console.log(JSON.stringify(createObj(1, 'blue', 'ABC')));   // =>  {"value":"blue","index":1,"key":"ABC"}
console.log(JSON.stringify(createObj(2, 'red', 'DEF')));    // =>  {"value":"red","index":2,"key":"DEF"}
console.log(JSON.stringify(createObj(3, 'green', 'GHI')));  // =>  {"value":"green","index":3,"key":"GHI"}

我是否可以始终期望按照我将createObj函数放在对象上的顺序对字符串进行字符串化?在创建对象后,我不再向对象添加任何属性。

如果我不能保证这个订单,你能否推荐一种方法来保证钥匙的订单?

编辑:我意识到在迭代对象时,无法保证密钥的顺序(for-inObject.keys),但保证{{1}的顺序它呢?

1 个答案:

答案 0 :(得分:0)

MDN处的JSON.stringify()文档和ECMAScript Language Specification未指明字符串化的顺序。虽然这个顺序对于stringnumberboolean这样的原始类型来说非常顺序,但您无法确定对象,函数,数组等等。最好的选择可能是实现您自己的stringify版本,以便100%确定输出。