JavaScript – 循环的一部分中的“变量未定义”,在不同的部分工作
使用以下代码,我收到此错误RewardPurchases.PurchasesArray[i].Student_Name is undefined
:
$('button#random').click( function() { var Num = Math.floor(Math.random() * Total+1); Num--; for (var i in RewardPurchases.PurchasesArray) { /* --------> */ $('#display').text("Ticker number " + Num + " in the LEAP database belongs to...\n\n\n" + RewardPurchases.PurchasesArray[i].Student_Name.toUpperCase() + " (" + TutorGroup + ")").show().delay(300); if (i == Num) { var TutorGroup = ''; Frog.API.get('timetable.getClasses', { 'params': {'student': RewardPurchases.PurchasesArray[i].Student_ID }, 'onSuccess': function(data) { for (var i = 0; i < data.length; i++) { if (data[i].subject.name == "Tut Period") { TutorGroup = data[i].name.replace("/Tp", ""); } } } }); $('#display').animate({'font-size': 36}, 1500, function() { $(this).prepend('!!! WINNER !!!
'); }); alert("Ticker number " + Num + " in the LEAP database belongs to...\n\n\n" + RewardPurchases.PurchasesArray[i].Student_Name.toUpperCase() + " (" + TutorGroup + ")"); } } } );
但是,如果我移动这一行$('#display').text(...
如下),错误消失:
$('button#random').click( function() { var Num = Math.floor(Math.random() * Total+1); Num--; for (var i in RewardPurchases.PurchasesArray) { if (i == Num) { var TutorGroup = ''; /* --------> */ $('#display').text("Ticker number " + Num + " in the LEAP database belongs to...\n\n\n" + RewardPurchases.PurchasesArray[i].Student_Name.toUpperCase() + " (" + TutorGroup + ")").show().delay(300); Frog.API.get('timetable.getClasses', { 'params': {'student': RewardPurchases.PurchasesArray[i].Student_ID }, 'onSuccess': function(data) { for (var i = 0; i < data.length; i++) { if (data[i].subject.name == "Tut Period") { TutorGroup = data[i].name.replace("/Tp", ""); } } } }); $('#display').animate({'font-size': 36}, 1500, function() { $(this).prepend('!!! WINNER !!!
'); }); alert("Ticker number " + Num + " in the LEAP database belongs to...\n\n\n" + RewardPurchases.PurchasesArray[i].Student_Name.toUpperCase() + " (" + TutorGroup + ")"); } } } );
我不明白为什么会这样呢? i
没有被if
语句定义?
我正在尝试在数组中显示每个名称,然后选择一个随机名称并用“WINNER!”以大字体显示它。 它上面。
提前致谢,
你的arrays的完整性是什么样的?
//RewardPurchases.PurchasesArray [0] undefined [1] { Student_Name: undefined } [2] { Student_Name: 'Bob' }
以上都在数组中有效。 [0]
和[1]
都会给你收到的错误。
如果PurchasesArray不是数组而是对象 – 那么您需要在循环中进行检查。
for (var i in RewardPurchases.PurchasesArray) { if(!RewardPurchases.PurchasesArray.hasOwnProperty(i)) { continue; } //rest of code... }
在这种情况下,使用for .. in
不是最好的做法。 它对所有对象属性进行深度挖掘,包括属于原型的函数。
只有$('#display').text(...
导致你问题的原因是你试图使用属性RewardPurchases.PurchasesArray [i]的属性。在其他地方,你自己使用它,这不会失败,它会在这些情况下默默地返回undefined
。(又名'params': {'student': RewardPurchases.PurchasesArray[i].Student_ID }
。)
使用你在for … in循环中包装所有代码的测试, typeof RewardPurchases.PurchasesArray[i] === 'object' && typeof RewardPurchases.PurchasesArray[i] !== null
应该这样做,确保每个在迭代中使用的属性只是一个对象,而不是函数或某个“标量”值。
注意:您也可以使用RewardPurchases.PurchasesArray[i].hasOwnProperty('propertyName')
,但并不是所有浏览器都普遍支持它,所以我给出的上述示例更安全,适用于您的目的。