TypeError:null不是对象(评估'*')

时间:2017-12-05 14:07:38

标签: javascript angularjs json

以下代码:

var item = cartModel.getlist()[index];
if((item.isDepo()) {
    // Some code
} else if(!permission.hasPermissionToVoidSKU()) {
    // Some code
} else if(item.sku.indexOf(mposConstants.RESTOCK_FEE_SKU) > -1){
                // Some code 
}

我收到了这个错误:

  

TypeError:null不是对象(评估'item.sku.indexOf')

如果item对象为null,则错误是不同的(见下文)。 在什么情况下会抛出此错误?

更新

如果item.sku为空,则错误为:

  

[致命] [] [ - ] [“TypeError:无法读取属性'indexOf'为null

如果item为空,则错误为:

  

[致命] [] [ - ] [“TypeError:无法读取属性'isDepo'为null

2 个答案:

答案 0 :(得分:3)

产生不同错误消息的原因很简单,它们是由不同的浏览器产生的。错误是相同的(对象sku上的itemnull)。

给出以下代码

<script>
  var item = {sku: null};
  item.sku.indexOf("");
</script>

这是针对不同浏览器的一些错误消息:

  • Firefox:TypeError: item.sku is null
  • Firefox开发人员版:TypeError: item.sku is null, can't access property "indexOf" of it
  • 歌剧:TypeError: Cannot read property 'indexOf' of null at example.html:3
  • Safari:TypeError: null is not an object (evaluating 'item.sku.indexOf')

要获取错误消息,必须将item定义为一个对象,并且必须将sku设置为null。如果skuundefined,那么您将得到以下错误消息(Safari):TypeError: undefined is not an object (evaluating 'item.sku.indexOf')。如果itemnull,那么您将得到类似的内容:TypeError: null is not an object (evaluating 'item.sku')

答案 1 :(得分:1)

基于this answer和其他人,听起来你得到了这个错误,因为在它引用或作用的DOM元素被加载之前调用了一个函数。

在您提供的代码段中,我没有看到任何DOM元素的直接引用,但我建议在HTML完成呈现后调用您的脚本(即通过放置任何<script>标记在HTML的末尾,或者如果使用jQuery,则使用$(document).ready()调用。)