有人能解释为什么我在 Javascript 中收到此错误吗?[无法读取未定义的属性‘length’]
2016-11-07
128
这是我的代码:
function isEven(num) {;
if (num % 2 === 0) {
return true;}
else {
return false;}
}
function convertToIntegers(lst) {
lst.split(' ');
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++}
}
function iqTest(numbers){
var int_list = convertToIntegers(numbers);
var e_list = [];
var o_list = [];
var count = 0;
var len_int = int_list.length;
while (count < len_int) {
if (isEven(int_list[count]) === true) {
e_list.push(count);}
else if (isEven(count) === false) {
o_list.push(count);}
count++}
if (e_list.length < 2 && e_list.length > 0 && o_list.length > 2) {
return e_list[0];}
else if (o_list.length < 2 && o_list.length > 0 && e_list.length > 2) {
return o_list[0];}
}
每次运行它时,我都会收到此错误,提示“TypeError:无法读取 iqTest 中未定义的属性‘length’”。有人能向我解释如何修复此错误吗?我不明白为什么我的代码中任何对象都是未定义的。我所做的每个 var 声明都是完整的。我认为只有当我编写了类似“var a”的内容而没有定义它时,才会出现未定义的情况。
3个回答
Tomer W 和 Patrick Evans 是对的。更改您的辅助函数
function convertToIntegers(lst) {
lst = lst.split(' ');
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++;
}
return lst;
}
这样,您就可以存储拆分的结果,然后在完成后返回数组。
话虽如此,这个函数不是必需的。查看内置数组函数 map
Jake
2016-11-07
这个非常简单!
在这些情况下,您需要追溯值。
-
您在
iqTest()
中的行var len_int = int_list.length;
中使用
-
对
int_list
的最后一次赋值位于行var int_list = convertToIntegers(numbers);
-
瞥见
convertToIntegers(numbers)
没有显示return
语句。
.length
因此得出结论:
convert2Integers()
不会将任何内容返回到
int_list
然后您使用
int_list.length;
undefined
看来您希望从
convert2Integers()
返回
lst
function convertToIntegers(lst) {
lst = lst.split(' '); // NOTICE CHANGE, + create a different list!
var len = lst.length;
var count = 0;
while (count < len) {
lst[count] = parseInt(lst[count]);
count++
}
return lst; //THIS LINE was Missing!
}
Tomer W
2016-11-07
要扩展@Patrick Evans 的评论,您需要保存拆分的结果,然后将其用于您的 while 循环。顺便提一下,您知道循环的迭代次数,因此您可以使用 for 循环。
function convertToIntegers(lst) {
//lst.split(' ');
var lst_array = lst.split(' ');
var len = lst_array .length;
var count = 0;
while (count < len) {
lst_array[count] = parseInt(lst_array[count]);
count++}
}
//
//for loop code
//
//for(i=0;i<lst_array.length;i++){
// lst_arry[i] = parseInt(lst_array[i]);
//}
Wesley
2016-11-07