【发布时间】:2020-08-18 22:51:54
【问题描述】:
我有一个 JS 脚本,可以将 (sessionStorage.setItem()) 和删除 (sessionStorage.removeItem()) 项目添加到 sessionStorage。它的工作原理是添加一个项目会将其附加到 sessionStorage 数组的末尾。它在 Edge 中按预期工作,但在 Chrome 和 Firefox 中进行测试时,在向 sessionStorage 添加项目后,sessionStorage 会按字母顺序按键重新排序,这意味着添加的最后一项不会位于数组的末尾,这会破坏整个脚本.我该如何防止这种情况? 这是向 sessionStorage 添加项目的函数:
function addToCompareList(productName, productID, productHref) {
var existsInCompare = false;
for(var i = 0; i < sessionStorage.length; i++) {
if(sessionStorage.key(i) == productName) {
existsInCompare = true;
break;
}
}
if(!existsInCompare) {
sessionStorage.setItem(productName, productID + ',' + productHref);
}
//item limit should be 4, so if storage exceeds limit, remove oldest item. This is the part that becomes faulty in some browsers
if(sessionStorage.length > 4) {
sessionStorage.removeItem(sessionStorage.key(0));
}
}
这是向 sessionStorage 添加项目的函数的代码。
添加项目后,通过会话存储和 console.log()-ing 循环每个项目在不同浏览器中的工作方式不同:在 Edge 中,项目按照添加的顺序进行记录,在 Chrome 和 Firefox 中它们得到按字母顺序记录,这意味着代码的注释部分无法按预期工作。
【问题讨论】:
-
sessionStorage 不是 一个数组......是什么让你认为任何东西都有任何特定的顺序?请发布一些 code 来展示您遇到的问题 - 即“破坏”的“脚本”(注意:firefox 没有这样的事情,只有 chrum 有
-
完成,添加代码示例。帮助将不胜感激。
-
in Chrome and Firefox they get logged alphabeticallyno ... 不是 firefox ... chrome 是异常值,bad bad chrome :p 如果您看到 firefox 做任何不同的事情,也许您的 firefox 旧 ' - 实际上,Firefox 要复杂得多 - 它几乎是随机的 -
从中学到一件事......对象键没有顺序 - 永远不要依赖它
标签: javascript html session-storage