【问题标题】:Why is there no logical order in sessionStorage?为什么 sessionStorage 中没有逻辑顺序?
【发布时间】:2020-02-24 21:28:37
【问题描述】:

我的 SessionStorage 有问题。我按特定顺序存储了所有物品,但是当我尝试取回它们时(使用for 循环),它们的顺序不正确。

这是我设置 SessionStorage 的方式:

function set_Item(){
    var nom = document.getElementById("nom").value;
    nom = nom.toUpperCase();
    sessionStorage.setItem("Nom", nom);
    sessionStorage.setItem("Prenom", document.getElementById("prnm").value);
    sessionStorage.setItem("Adr", document.getElementById("adr").value);
    sessionStorage.setItem("cdPost", document.getElementById("cdPost").value);
    sessionStorage.setItem("Ville", document.getElementById("ville").value);
    sessionStorage.setItem("Pays", document.getElementById("pays").value);
}

这就是我找回元素的方式:

function get_Item(){
    var res = document.getElementById("res");
    var txt;
    var key;
    var valeur;
    for(var i = 0; i< sessionStorage.length; i++){
        key = sessionStorage.key(i);
        valeur = sessionStorage.getItem(key);
        if(key == "Nom"){
            txt = document.createElement("p");
            txt.textContent = valeur + " " + sessionStorage.getItem(sessionStorage.key(i+1));
            res.insertAdjacentElement('beforeend',txt);
            i++;
        }else {
            txt = document.createElement("p");
            txt.textContent = valeur + " ";
            res.insertAdjacentElement('beforeend',txt);
        }
    }
}

我得到了什么:

项目的顺序是随机的,有时会发生变化。

我知道我可以使用密钥来获取正确的项目并设置好的渲染顺序。但是这种行为的原因是什么?

【问题讨论】:

  • 它是一个对象,它是一个无序的属性集合,每个属性都包含一个原始值、对象或函数。

标签: javascript session-storage


【解决方案1】:

Storage 对象中键的顺序(即在会话存储和本地存储中)是用户代理定义的(即标准不需要任何特定顺序,由用户代理/浏览器决定一个)。

来自living HTML standard

key(n) 方法必须返回列表中第 n 个键的名称。键的顺序是用户代理定义的,但必须在对象内保持一致,只要键的数量不变。 (因此,添加或删除键可能会更改键的顺序,但不能仅更改现有键的值。)

【讨论】:

    【解决方案2】:

    您可以做的不是遍历所有 sessionStorage 项目

    if(sessionStorage.hasOwnProperty("Nom")) {
        // your code here
    } else {
        // your code here
    }
    

    如果项目设置为 sessionStorage,您可以随时访问它

    sessionStorage.setItem("Nom", "Some Name I guess");
    console.log(sessionStorage.Nom); // see this works  
    

    你还说:

    项目的顺序是随机的,有时会发生变化。

    点击此链接,它可能会帮助您了解 javascript 中的对象顺序。 Does JavaScript Guarantee Object Property Order?

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2021-09-21
      • 2020-08-15
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 2022-01-13
      • 2015-03-20
      • 2015-02-28
      相关资源
      最近更新 更多