谁能解释为什么我在 Javascript 中出现此错误?[无法读取未定义的属性'length']



下面是我的代码:

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"。有人能告诉我如何解决这个错误吗?我不明白为什么任何对象在我的代码中都是未定义的。我所做的每个变量声明都是完整的。我认为未定义只会出现在没有定义的情况下。

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

这个很简单!
在这些情况下,您需要跟踪该值。

  1. 您在var len_int = int_list.length;

  2. iqTest()中使用.length
  3. int_list的最后赋值在var int_list = convertToIntegers(numbers);

  4. 瞥见convertToIntegers(numbers)显示没有return语句

因此,

结论:
convert2Integers()不返回任何值到int_list
然后使用undefinedint_list.length;

您似乎希望从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!
}

要扩展@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]);
//}

相关内容

最新更新