对象未定义,不知道为什么

时间:2012-03-26 22:33:23

标签: javascript

我收到一个错误“TypeError:无法读取未定义的属性'样式' 如果你能帮我调试它,我会很高兴的:

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();

7 个答案:

答案 0 :(得分:2)

变化:

i <= tweetlinks.length

要:

i < tweetlinks.length

您的循环超出了数组,导致最后一次迭代中的未定义值。数组索引的范围从0到length - 1,而不是0到length。

答案 1 :(得分:2)

您的代码中存在各种错误。首先:你不想从0循环到&lt; =。length但是要&lt; 。长度。其次,在第二个循环中,您使用g作为计数器变量,但与i。

进行比较

答案 2 :(得分:2)

代码中存在不匹配的循环变量。你应该写:

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

而不是:

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

此外,length循环中与for的所有比较都应为strictly less than<)而不是less than or equal to<=) ,因为数组索引是从零开始的。

答案 3 :(得分:1)

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();

使用i < arr.length而不是i <= arr.length的原因是因为数组索引为零,这意味着第一个元素位于索引0,即使我们将其称为 first 元素。如果我们有一个数组['a', 'b', 'c'],它有三个元素,但第三个元素在索引2处。

答案 4 :(得分:0)

嗯,你有没有检查过你是真正获取变量: tweetlinks和facelinks?

在我看来,您正在设置“未定义”对象的“样式”属性。 也许你没有得到你在这些阵列中所期望的东西。

答案 5 :(得分:0)

有打字错误。而不是&#34; elment&#34;,它应该是&#34;元素&#34;。

答案 6 :(得分:-1)

在您的setBackground函数中,elment未定义或为null,或者没有任何内容。这可能是因为您通过for循环遍历索引。变化:

i <= facelinks.length

要:

i < facelinks.length