Почему в sessionStorage нет логического порядка? - PullRequest
2 голосов
/ 24 февраля 2020

У меня проблема с моим SessionStorage. Я сохранил все свои предметы в определенном порядке c, но когда я пытаюсь вернуть их (с for l oop), они не в правильном порядке.

Вот как Я установил 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);
        }
    }
}

Что я получаю:

sessionStorage Items

Порядок предметов случайный и иногда меняется.

Я знаю, что могу использовать ключ, чтобы получить нужные предметы и установить хороший порядок рендеринга. Но в чем причина такого поведения?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Порядок ключей в объекте Storage (т. Е. Как в хранилище сеансов, так и в локальном хранилище) определяется пользовательским агентом (т. Е. Стандарт не требует какого-либо определенного порядка c и зависит от пользовательского агента / браузер, чтобы выбрать один).

Из живой HTML стандарт :

Метод key(n) должен возвращать имя n й ключ в списке. Порядок ключей определяется пользовательским агентом, но он должен быть согласованным внутри объекта, пока количество ключей не меняется. (Таким образом, добавление или удаление ключа может изменить порядок ключей, но простое изменение значения существующего ключа не должно.)

0 голосов
/ 24 февраля 2020

Вместо итерации по всем 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. Имеет ли JavaScript Гарантийный порядок объекта недвижимости?

...