有人可以告诉我为什么我出现错误Unable to get property 'substr' of undefined or null reference
吗?我只会在IE浏览器(包括Edge)上收到此错误-所有其他浏览器都可以正常工作:
share.getMedia = function (arrClassList) {
var mediaType;
if (arrClassList.length > 1) {
for (var i = 0; arrClassList.length >= i; i++) {
if (typeof arrClassList[i] != "undefined") {
var currentString = arrClassList[i].substr(2);
if (currentString.indexOf(arrTemplates)) {
mediaType = currentString;
}
}
}
} else {
if (typeof arrClassList[0] != "undefined") {
var currentString = arrClassList[0].substr(0, 2);
if (currentString.indexOf(arrTemplates)) {
mediaType = currentString;
}
}
}
return mediaType;
};
更新:当我做控制台日志
arrClassList
时,我确实得到了一个对象:{
0: "social",
1: "facebook"
}
有人知道这里的问题吗?它仅在IE + Edge浏览器中发生...
最佳答案
这不是您问题的解决方案。但是想在这里写而不是注释,以提高可读性。
数组不等于对象。作为arrClassList
的值共享的是对象,而.length
属性不适用于对象。因此,if
条件将返回false
。但是,如果键是字符串类型,则可以使用arrClassList[0]
或arrClassList['abc']
来超出对象值。typeof arrClassList[0] != "undefined"
将返回true,但是您应该使用标识===
运算符而不是相等的==
运算符。
如果0
键的值不等于null/undefined
,则应获取substr
。
我看到的问题与arrTemplates
有关。如果是字符串,则应该可以正常工作。如果它是一个字符串数组,并且该数组中只有一个字符串,则它应该可以工作。如果它是由多个字符串组成的数组,则它将不起作用。
为什么它不能在IE和Edge上正常运行,而在其他平台上却可以正常工作。我的理论是,不同的浏览器使用不同的javascript引擎,即使有小问题,这些引擎在某些情况下也会尝试使您的代码正常工作。 IE和Edge都使用名为Chakra
的JScript引擎(尽管非常相似,但JScript和Javascript有所不同)。我的猜测是您的代码中存在Chakra无法解决的问题。
关于javascript - 无法获取未定义或空引用的属性“substr”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32352045/