繁体   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