【问题标题】:console saying my array is undefined javascript控制台说我的数组是未定义的 javascript
【发布时间】:2013-06-09 13:45:30
【问题描述】:

我看过很多例子,但我似乎无法弄清楚我在这里做错了什么:

 var names_Array = [];
 var names_List = new WinJS.Binding.List(names_Array);
 names_List.push({ name: "Joe Dowling", image: "image/Joe Dowling.png", ClientID: "1234" });

window.localStorage.setItem('names_Array', JSON.stringify(names_Array));

var test = JSON.parse(window.localStorage.getItem('names_Array'));
console.log(test.name);

我在控制台中未定义,为什么会这样?

【问题讨论】:

  • 什么是names_Array,发布它的声明。
  • 看来names_Array其实不是数组?
  • @Kevin Bowersox 查看已编辑
  • @Igor Dymov 查看已编辑
  • 数组没有name 属性,所以这当然会返回undefined

标签: javascript arrays json parsing local-storage


【解决方案1】:
window.localStorage.setItem(
    'names_Array',
    JSON.stringify(['John Doe', 'Jane Doe'])
);
console.log(JSON.parse(window.localStorage.getItem('names_Array')));

打印

["John Doe", "Jane Doe"]

也许test.name 有碍事?

【讨论】:

    【解决方案2】:

    你有两个错误:

    1) 您刚刚初始化了names_Array,并没有向其中添加任何元素。您将该空数组存储在 localStorage 中。

    2) 由于test 是一个对象数组(如果您将对象推入其中),您必须通过索引访问一个特定对象,或者遍历数组以获取成员。

    这段代码应该可以工作:

    var names_Array = [];
    var names_List = new WinJS.Binding.List(names_Array);
    names_List.push({ name: "Joe Dowling", image: "image/Joe Dowling.png", ClientID: "1234" });
    
    window.localStorage.setItem('names_Array', JSON.stringify(names_List));
    
    var test = JSON.parse(window.localStorage.getItem('names_Array'));
    
    for( i in test ) console.log(test[i].name);
    

    【讨论】:

    • 使用console.log(test[0].name);给我一个错误由于我原来的问题,无法获取未定义或空引用的属性“名称”
    • 是的,我之前尝试过,但得到了错误:不支持值参数中的循环引用
    • 这意味着您无法将该数组存储为 json 并保存在本地存储中。您需要创建一个新数组并将函数以外的值传输到新数组中。只需执行 console.dir() 即可了解数组中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2023-03-06
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多