2013-07-18 6 views
7

現在、私は問題を引き起こしているかなり機能不全のJavascriptプログラムを持っています。しかし、それは私は理解していない1つのエラースロー:あなたはおそらく推測できるように私は、何をしようとしているTypeError: 'undefined'はオブジェクトではありません

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

を、sub辞書内の特定の「from」配列のlengthをチェックしています。ここで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... 

任意のアイデアは素晴らしいことです。率直に言って、私はなぜ私がすでに明示的に(typeof(sub.from))のタイプをチェックしたかについてTypeErrorを得ているのを見ることができません...

+1

FirebugやChromeの内蔵デバッガなどのJavascriptデバッガを使用します。そこにブレークポイントを置き、変数を調べることができます。 –

+0

サンプルデータはありますか? – loganfsmyth

+0

おそらく、sub.fromはnullです: 'typeof(null)!=" undefined "; // = true' – HMR

答えて

4

私は何かが定義されていないと同時に、それが未定義であるというエラーを得る。どのブラウザを使用していますか?私はあなたがサブをリセットし、それによってsub.fromをリセットしていることがわかりますが、以下の方法(余分=と意思長truthy評価)

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

にチェックすることができ

[更新]

が、再チェックに失敗し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文ではなくではないということですステートメント。 Firebugでは、エラーが発生したときに自動的に壊れてしまい、if文ではなく、その行を改行すると思います。

+0

私はMac OS 10.8でSafariを使用しています。あなたのコードで試してみて、同じエラーが発生しました。http://i.imgur.com/XZEnl2V.png - 別のブラウザで試してみて、エラーメッセージが表示されたら助かりましたか? – user1483482

+0

@ user1483482データは何ですか?定義されていないと同時に定義されていないことは奇妙なことです。 – HMR

+0

Google Chromeは 'Uncaught TypeError:プロパティ 'length' of undefined'を読み取れません:/ – user1483482

-2

'undefined'は文字列であり、オブジェクトはおそらくそれと等しくないかもしれません...しかし、引用符なしで未定義を使用すると、それはキーワードです。

はい、それは文字列 'undefined'と同じではありませんでしたが、使用するときは本当に定義されていませんでした。

関連する問題