为什么将Argument视为Object而不是Array?

时间:2015-05-14 06:47:30

标签: javascript arrays object

为什么将Argument视为Object而不是Array?

问题描述:

考虑一群绵羊,他们的地方可能会遗漏一些绵羊。我们需要一个函数来计算数组中存在的绵羊数量(true表示存在)。

例如,

 [true,  true,  true,  false,
  true,  true,  true,  true ,
  true,  false, true,  false,
  true,  false, false, true ,
  true,  true,  true,  true ,
  false, false, true,  true]

正确答案是17。

我的解决方案:

   function countSheeps(arrayOfSheeps) 
{
    var num=0;
    for(var i=0; i<arrayOfSheeps.lenght(); i++)
     {  
       if(arrayOfSheeps[i]==true){ num=num+1; } 
     }
    return num;
}

测试案例:

var array1 = [true,  true,  true,  false,
              true,  true,  true,  true ,
              true,  false, true,  false,
              true,  false, false, true ,
              true,  true,  true,  true ,
              false, false, true,  true ];

Test.expect(countSheeps(array1) == 17, "There are 17 sheeps in total")

输出:

TypeError: Object true,true,true,false,true,true,true,true,true,false,true,false,true,false,false,true,true,true,true,true,false,false,true,true has no method 'lenght'
   at countSheeps


0 Passed
0 Failed
1 Errors

Process took 110ms to complete

P.S。我是JS的新手。

2 个答案:

答案 0 :(得分:0)

根据评论,您应该将lenght()更改为length

function countSheeps(arrayOfSheeps) 
{
    var num=0;
    for(var i=0; i<arrayOfSheeps.length; i++)
    {  
      if(arrayOfSheeps[i]==true){ num++; }
    }
    return num;
}

答案 1 :(得分:0)

  

为什么将Argument视为Object而不是Array?

因为所有数组都是javascript中的对象。该错误消息基本上包含引用库的类型(它是一个对象,而不是诸如string / number / boolean之类的基本类型)和该对象的.toString()表示(在您的数组的情况下)布尔值与arrayOfSheeps.join(','))相同。

它并没有说arrayOfSheeps不是一个数组。它只是说数组对象是一个对象。