TypeError:null 不是对象(评估‘*’)
对于以下代码:
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
出现不同错误信息的原因很简单,因为它们是由不同的浏览器生成的。错误是相同的(对象
item
上的
sku
为
null
)。
给定以下代码
<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
。如果
sku
为
undefined
,您将收到如下错误消息(Safari):
TypeError:undefined 不是对象(评估“item.sku.indexOf”)
。如果
item
为
null
,您将收到如下消息:
TypeError:null 不是对象(评估“item.sku”)
。
根据 此答案 和其他答案,您收到该错误的原因似乎是在函数引用或作用于的 DOM 元素加载之前调用了该函数。
在您提供的代码片段中,我没有看到对任何 DOM 元素的直接引用,但我建议在 HTML 完成渲染后调用脚本(即,在 HTML 末尾放置任何
<script>
标签,或者如果您使用 jQuery,则使用
$(document).ready()
调用)。