无法读取属性'push'的null

时间:2014-04-19 05:58:04

标签: javascript jquery typeerror

我有一个可以在我的localhost上运行的页面..当我把它放在远程服务器上时,它出错了。返回错误的代码是

  var $app_list = localStorage.getItem('LsAppList');
  var AppListJson = JSON.parse($app_list);
      AppListJson.push({ 
        "extapp_id": appdetail.get("addAppId"),
        "desc": appdetail.get("addAppName"),
        "device_no": appdetail.get("devicenoValue"),
        "validation_key": appdetail.get("activationkeyValue") 
    });

控制台日志

Uncaught TypeError: Cannot read property 'push' of null
addToJson EncigoHome.js:126
n.extend.trigger kendo.mobile.min.js:9
s.extend._release kendo.mobile.min.js:15
i._userEvents.o.UserEvents.tap kendo.mobile.min.js:15
n.extend.trigger kendo.mobile.min.js:9
l.extend.notify kendo.mobile.min.js:13
u.extend._trigger kendo.mobile.min.js:13
u.extend.end kendo.mobile.min.js:13
l.extend._eachTouch kendo.mobile.min.js:13
l.extend._end kendo.mobile.min.js:13
arguments.length.t.(anonymous function) kendo.mobile.min.js:10
b.event.dispatch jquery-1.9.1.js:9593
v.handle

2 个答案:

答案 0 :(得分:1)

.push()方法只能用于数组。

您似乎没有将该项目存储在localStorage中,这就是它返回null的原因

答案 1 :(得分:1)

每个域

localStorage(更具体地说是same origin)。与远程域关联的localStorage无权访问与您的localhost关联的localStorage中存储的值。

您应检查是否存储了值并回退到默认值或处理错误:

var $app_list = localStorage.getItem('LsAppList');
var AppListJson = $app_list != null ? JSON.parse($app_list) : [];
//...

更详细:

var $app_list = localStorage.getItem('LsAppList'),
    AppListJson;
if ($app_list != null) {
    AppListJson = JSON.parse($app_list);
} else {
    // treat no LsAppList stored case
    // you could show a message or set it to a default value
    AppListJson = [];
}

此"以前没有存储数据"每当用户清除浏览器数据或切换浏览器/设备时,都会发生这种情况,因此必须正确对待它。


错误的根本原因(正如您可能已经发现的那样)是localStorage.getItem(key)在当前没有为给定null存储值时返回key域。然后JSON.parse(null) === nullnull.push()抛出。


就像一个挑剔的,我建议检查你的变量命名:

  • 不要为非构造函数使用PascalCase命名。
  • 不要将camelCase与下划线命名约定混合在一起。
  • 推荐阅读:Idiomatic.js naming

而且,AppListJson不是JSON,它是本机数组。 JSON只能存在于字符串上下文中,即您的$app_list是JSON。有关JSON /而不是JSON的更深入的解释:There's no such thing as a "JSON Object"