Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
23
rated 0 times [  27] [ 4]  / answers: 1 / hits: 178695  / 11 Years ago, thu, july 18, 2013, 12:00:00

I have a currently fairly dysfunctional Javascript program that's been causing me problems. However, it throws one error that I just don't understand:



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


What I'm trying to do, as you can probably guess, is check the length of a certain from array in the sub dict. Here's the source code for the entire function, and here's the code of the loop that I think is causing the error:



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...


Any ideas would be great. Frankly, I just can't see why I'm getting a TypeError about something that I've already explicitly checked the type of (typeof(sub.from))...


More From » javascript

 Answers
35

I'm not sure how you could just check if something isn't undefined and at the same time get an error that it is undefined. What browser are you using?


You could check in the following way (extra = and making length a truthy evaluation)


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

[update]


I see that you reset sub and thereby reset sub.from but fail to re check if sub.from exist:


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

My guess is that the error is not on the if statement but on the for(i... statement. In Firebug you can break automatically on an error and I guess it'll break on that line (not on the if statement).


[#76915] Wednesday, July 17, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
tristani

Total Points: 318
Total Questions: 95
Total Answers: 106

Location: Saint Lucia
Member since Wed, Feb 8, 2023
1 Year ago
;