簡體   English   中英

對象未定義,不知道為什么

[英]object is undefined, don't know why

我收到一個錯誤“ TypeError:無法讀取未定義的屬性'style'”,如果您可以幫助我調試它,我將非常高興:

var TWITTER = '"twitter"';
var FECEBOOK = '"facebook"';
var FACEBOOKicon = "https://s-static.ak.facebook.com/rsrc.php/yi/r/q9U99v3_saj.ico";
var TWITTERicon = "https://twitter.com/phoenix/favicon.ico";

var tweetlinks;
tweetlinks = document.querySelectorAll('[href*=' + TWITTER + ']');
var facelinks;
facelinks = document.querySelectorAll('[href*=' + FECEBOOK + ']');

function getLinks() {
    for (var i = 0; i <= tweetlinks.length; i++) {
        setBackground(tweetlinks[i], TWITTERicon);
    }

    for (var g = 0; i <= facelinks.length; g++) {
        setBackground(facelinks[g], FACEBOOKicon);
    }    

    function setBackground(elment, backimage) {
        elment.style.backgroundImage = backimage;
    }
}

getLinks();

更改:

i <= tweetlinks.length

至:

i < tweetlinks.length

您的循環超出了數組的范圍,從而在最后一次迭代中產生了未定義的值。 數組索引的范圍是0到長度-1,而不是0到長度。

您的代碼中存在各種錯誤。 首先:您不想從0循環到<= .length,而是循環到<.length。 其次,在第二個循環中,將g用作計數器變量,但與i進行比較。

您的代碼中有不匹配的循環變量。 您應該寫:

for (var g = 0; g < facelinks.length; g++) {
    setBackground(facelinks[g], FACEBOOKicon);
}

代替:

for (var g = 0; i <= facelinks.length; g++) {
    setBackground(facelinks[g], FACEBOOKicon);
}

此外,因為數組索引是從零開始的,所以所有for循環中對length的比較都應strictly less than< )而不是less than or equal to<= )。

Ates和Frederic都在代碼中發布了問題。 您需要同時查看兩者才能使代碼正常工作:

var TWITTER = '"twitter"';
var FECEBOOK = '"facebook"';
var FACEBOOKicon = "https://s-static.ak.facebook.com/rsrc.php/yi/r/q9U99v3_saj.ico";
var TWITTERicon = "https://twitter.com/phoenix/favicon.ico";

var tweetlinks;
tweetlinks = document.querySelectorAll('[href*=' + TWITTER + ']');
var facelinks;
facelinks = document.querySelectorAll('[href*=' + FECEBOOK + ']');

function getLinks() {
    for (var i = 0; i < tweetlinks.length; i++) {
        setBackground(tweetlinks[i], TWITTERicon);
    }

    for (var g = 0; g < facelinks.length; g++) {
        setBackground(facelinks[g], FACEBOOKicon);
    }    

    function setBackground(elment, backimage) {
        elment.style.backgroundImage = backimage;
    }
}

getLinks();

element. 使用i < arr.length而不是i <= arr.length的原因是因為數組索引為零,這意味着第一個元素的索引為0,即使我們將其稱為元素也是如此。 element is at index 2. 如果我們有一個數組['a', 'b', 'c'] ,則它具有三個元素,但是元素在索引2處。

出現打字錯誤。 而不是“元素”,應該是“元素”。

好吧,您是否檢查了變量的真正含義:tweetlink和facelink?

在我看來,您正在設置“未定義”對象的“樣式”屬性。 也許您沒有得到這些數組中的期望。

看起來在您的setBackground函數中, elment是未定義的或為null或如他們所說的沒有。 這可能是因為您要通過for循環遍歷索引。 更改:

i <= facelinks.length

至:

i < facelinks.length

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM