任何人都可以解释为什么我在Javascript中收到此错误? [无法阅读财产'篇幅'未定义]

时间:2016-11-07 22:01:56

标签: javascript undefined typeerror

这是我的代码:

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];}
      }

每次我运行它都会出现这个错误,上面写着&#34; TypeError:无法读取属性&#39;长度&#39;未定义的iqTest&#34;。任何人都可以向我解释如何解决这个错误。我不明白为什么我的代码中的任何对象都是未定义的。我做的每个var声明都是完整的。我认为只有在我写了类似于&#39; var a&#39;没有定义它。

3 个答案:

答案 0 :(得分:0)

这个很容易!
在这些情况下,您希望追溯值。

  1. 您在.length

  2. 行中iqTest()使用var len_int = int_list.length;
  3. int_list的最后一次分配位于第var int_list = convertToIntegers(numbers);

  4. convertToIntegers(numbers)处的噱头显示没有return声明。

  5. 因此得出结论:
    convert2Integers() int_list中没有任何内容返回int_list.length; 然后使用undefined

    lst

    您似乎希望从convert2Integers()

    返回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! }
    {{1}}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

要扩展@Patrick Evans注释,您需要保存拆分的结果,然后将其用于while循环。正如旁注所示,您知道循环的迭代次数,因此您可以使用for循环。

2016-11-07 23:16:08.738 DEBUG 1029 --- [nio-8080-exec-2] org.hibernate.SQL                        : select employee0_.id as id1_1_, employee0_.company_id as company_4_1_, employee0_.name as name2_1_, employee0_.surname as surname3_1_ from employee employee0_ left outer join company company1_ on employee0_.company_id=company1_.id where company1_.id=?
2016-11-07 23:16:08.744 DEBUG 1029 --- [nio-8080-exec-2] org.hibernate.SQL                        : select company0_.id as id1_0_0_, company0_.name as name2_0_0_ from company company0_ where company0_.id=?