TypeError:'undefined'不是对象

时间:2013-07-18 06:27:34

标签: javascript

我目前有一个相当功能失调的Javascript程序,这一直导致我的问题。但是,它抛出一个我不明白的错误:

TypeError: 'undefined' is not an object (evaluating 'sub.from.length')

正如您可能猜到的那样,我正在尝试做的是检查length字典中某个“from”数组的sub。这是source code for the entire function,这是我认为导致错误的循环代码:

console.log(afcHelper_ffuSubmissions.length); // just for debugging, returns the correct number
for (var i = 0; i < afcHelper_ffuSubmissions.length; i++) { // this whole section works fine
    var sub = afcHelper_ffuSubmissions[i];
    //console.log("THIS IS BROKEN DOWN BY LINK",afcHelper_Submissions[i]);
    if (pagetext.indexOf(afcHelper_ffuSections[sub.section]) == -1) {
        // Someone has modified the section in the mean time. Skip.
        document.getElementById('afcHelper_status').innerHTML += '<li>Skipping ' + sub.title + ': Cannot find section. Perhaps it was modified in the mean time?</li>';
        continue;
    }
    var text = afcHelper_ffuSections[sub.section];
    var startindex = pagetext.indexOf(afcHelper_ffuSections[sub.section]);
    var endindex = startindex + text.length;

    console.log(sub); 
    if (typeof(sub.from) != 'undefined' && sub.from.length > 0) { // ** problem spot?? this is the code i recently added.
        for (var i = 0; i < sub.from.length; i++) {
            mainid = sub.from[i]['id'];
            var sub = afcHelper_Submissions[mainid]; // and then it goes on from here...

任何想法都会很棒。坦率地说,我只是看不出为什么我得到TypeError关于我已经明确检查过(typeof(sub.from))类型的东西......

3 个答案:

答案 0 :(得分:6)

我不确定你怎么能检查某些东西是否未定义,同时得到一个未定义的错误。您使用的浏览器是什么?

您可以通过以下方式检查(额外=并使长度成为真正的评估)

if (typeof(sub.from) !== 'undefined' && sub.from.length) {

<强> [更新]

我看到你重置了sub,从而重置了sub.from但是没有重新检查sub.from是否存在:

for (var i = 0; i < sub.from.length; i++) {//<== assuming sub.from.exist
            mainid = sub.from[i]['id'];
            var sub = afcHelper_Submissions[mainid]; // <== re setting sub

我的猜测是错误不在if语句上,而是在for(i...语句中。在Firebug中,您可以自动中断错误,我猜它会在该行上中断(而不是在if语句中)。

答案 1 :(得分:-2)

&#39;未定义&#39;是一个字符串,并且该对象可能不等于...但是,如果您使用undefined而不带引号,则它是一个关键字。

所以,是的,它并不等于字符串&#39; undefined&#39;,但是当你去使用它时,它确实是未定义的。

答案 2 :(得分:-3)

如果要为对象分配值,请尝试此操作,并且它会以角度显示此错误。

构造函数中的板条对象

this.modelObj = new Model(); // <----------在上面声明对象之后