开发者问题收集

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

2017-12-05
29323

对于以下代码:

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 is not an object (evaluating 'item.sku.indexOf')

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

更新:

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

[FATAL] [] [-] ["TypeError: Cannot read property 'indexOf' of null

如果 item 为 null,则错误为:

[FATAL] [] [-] ["TypeError: Cannot read property 'isDepo' of null

2个回答

出现不同错误信息的原因很简单,因为它们是由不同的浏览器生成的。错误是相同的(对象 item 上的 skunull )。

给定以下代码

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

以下是不同浏览器的一些错误消息:

  • Firefox: TypeError:item.sku 为 null
  • Firefox 开发者版: TypeError:item.sku 为 null,无法访问其属性“indexOf”
  • Opera: TypeError:无法读取 example.html:3 上 null 的属性“indexOf”
  • Safari: TypeError:null 不是对象(评估“item.sku.indexOf”)

要获取您收到的错误消息, item 必须定义为一个对象,并且 sku 必须设置为 null 。如果 skuundefined ,您将收到如下错误消息(Safari): TypeError:undefined 不是对象(评估“item.sku.indexOf”) 。如果 itemnull ,您将收到如下消息: TypeError:null 不是对象(评估“item.sku”)

Michael Johansen
2018-09-05

根据 此答案 和其他答案,您收到该错误的原因似乎是在函数引用或作用于的 DOM 元素加载之前调用了该函数。

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

freginold
2017-12-05