【问题标题】:sessionstorage works but returns "undefined" in console. why?sessionStorage 有效,但在控制台中返回“未定义”。为什么?
【发布时间】:2017-06-29 16:29:12
【问题描述】:

我只是构建了一个 jquery 插件来处理一些数据存储。 当我尝试从存储中读取时,结果是读取的项目数据。暂时还好……

当我添加时

sessionStorage.setItem('test','some data');

或删除

sessionStorage.removeItem('test');

一个项目,我总是在console.log 中得到一个undefined

但它做了我应该做的。

我怎样才能摆脱未定义的任何想法???

我尝试的是

var result = sessionStorage.setItem('test','some data');

以为这会将它打印到 var 但它不会 ^^

我的代码:

(function ($) {

    $.storage = {

        add: function(name,value){

            if(typeof value === 'object' )
            {   
                /** convert object to json **/
                value = JSON.stringify(value);
            }
            /** add to storage **/
            sessionStorage.setItem(name,value);
        },

        read: function(name){

            /** read from storage **/
            var item = sessionStorage.getItem(name);
                try {
                    item = $.parseJSON(item);
                }catch(e){}
            return item;
        },

        remove: function(name){
            /** delete from storage **/
            sessionStorage.removeItem(name);
        },

        clear: function(){
            /** clear storage **/
            sessionStorage.clear();
        }

    }
})(jQuery);

解决方案

我尝试在控制台中添加存储...当我在脚本中使用它时,它什么也没返回!对不起

【问题讨论】:

  • “我怎样才能摆脱未定义的,有什么想法吗???” ——你为什么想要?
  • 因为它似乎是错误的......当我编程时,运行我的应用程序并且 undefined 出现了好几次......
  • @Dwza,我用你的代码创建了一个小提琴jsfiddle.net/satpalsingh/mCNFT。你能在小提琴中重现你的问题吗?另请注意,IE8+ 浏览器支持sessionStorage,请参阅caniuse.com/#search=sessionStorage

标签: javascript jquery session-storage


【解决方案1】:

setItemremoveItem 不返回任何值。因此你得到undefined。另请注意removeItem 只接受一个参数。

Reference,这是上述方法的函数符号

setItem(key:string, data:string):void

此公共方法通过指定的键存储数据。请注意,如果密钥已经存储,它将覆盖它。要考虑的另一件事是,如果我们存储一个密钥,并且通过 sessionStorage.key(0) 我们获得该密钥,然后我们存储另一个密钥/数据,最后我们再次存储第一个密钥, sessionStorage.key(0) 将返回存储的第二个密钥/数据,而不是第一个。

removeItem(key:string):void

此公共方法只是从存储中删除密钥和相关数据。

【讨论】:

  • 删除参数是复制粘贴错字。对不起。但是为什么我在调用这些函数时会在控制台中得到一个 undefined 呢?
  • @Dwza — 因为这个答案的第一句话中描述的原因!
  • @Quentin 我不想退回任何东西。甚至不是未定义的。 Satpal 所说的事情从一开始就很清楚......但问题是:我可以避免这种情况......
  • @Dwza — undefined 什么都没有。你不能拥有你想要的。
  • 我感觉我不了解你或者你不了解我...我知道未定义的什么都没有。但如果我调用console.log() 是我的事。那么我为什么要调用一个空的 console.log 呢?没理由!这就是为什么我想避免返回的 undefine。如果我编写一个 jquery 函数,它也不会返回任何内容!
【解决方案2】:
var result = sessionStorage.setItem('test','some data');

不返回任何东西。

sessionStorage.setItem('test','some data');

将值分配给'test'因此右侧没有任何值。 你想要的是

sessionStorage.setItem('test','some data');
var result = sessionStorage.getItem('test'); //<- here the right hand side is 'some data'

【讨论】:

  • 不是无效语句,只是setItem函数没有返回任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
相关资源
最近更新 更多