有人可以告诉我为什么我出现错误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/

10-12 14:47