2015-09-02 128 views
1

可能有人也許會告訴我,爲什麼我得到錯誤Unable to get property 'substr' of undefined or null reference?我只得到IE瀏覽器(包括邊緣)這個錯誤 - 其他所有瀏覽器很好地工作:無法獲取的未定義或空引用屬性「SUBSTR」

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; 
}; 

UPDATE:當我做控制檯日誌arrClassList我確實得到一個對象:

{ 
    0: "social", 
    1: "facebook" 
} 

有人知道問題在這裏嗎?它只發生在IE + Edge瀏覽器中...

+0

它取決於arrClassList包含的內容。你可能想弄清楚那裏有什麼數據或它到達那裏。 – Norman

+0

@Norman'arrClassList'包含一個字符串數組,所以也許這就是問題所在?如果是這樣,如何避免它?如上所述,該問題僅出現在IE + Edge – Steve

+0

當您在IE顯示錯誤之前警告元素時,您會得到什麼輸出? – Norman

回答

2

這不是您的問題的解決方案。但爲了更好的可讀性,我想寫在這裏而不是評論。

  1. 數組是不相等的對象。您共享的值爲arrClassList是對象,而.length屬性不適用於對象。所以if條件將返回false。但是,如果密鑰是字符串類型,則可以使用arrClassList[0]arrClassList['abc']來超出對象值。
  2. typeof arrClassList[0] != "undefined"將返回true,但你應該使用的身份===操盤平等==操作。
  3. 如果0鍵具有的值不等於null/undefined,你應該把你的substr
  4. 我看到的問題是arrTemplates。如果它是一個字符串,那應該很好。如果它是一個字符串數組,並且該數組中只有一個字符串,它應該可以工作。如果它是多個字符串的數組,它將不起作用。

爲什麼它不工作在IE和邊緣,對他人工作時。我的理論是,不同的瀏覽器使用不同的JavaScript引擎,並且這些引擎在某些情況下會盡量讓您的代碼工作,即使存在小問題。 IE和Edge都使用名爲Chakra的JScript引擎(儘管非常相似,JScript和Javascript有其區別)。我的猜測是,您的代碼中存在Chakra無法解決的問題。

相關問題