Javascript 将空对象与0理解为数字

Javascript 将空对象与0理解为数字,javascript,object,null,numbers,Javascript,Object,Null,Numbers,我当时正在进行代码战,试图完成一些任务,并问了一个问题 创建一个toDense()函数,该函数在给定稀疏数组时返回相应的密集数组。我使用了一个测试用例,如下所示: var sparse = [undefined, 2, null, , , 0, 6, null]; Test.assertSimilar( toDense(sparse), [2, 0, 6]); 我对代码的解决方案是: function toDense(sparse){ function isBoolean(value)

我当时正在进行代码战,试图完成一些任务,并问了一个问题

创建一个toDense()函数,该函数在给定稀疏数组时返回相应的密集数组。我使用了一个测试用例,如下所示:

var sparse = [undefined, 2, null, , , 0, 6, null];
Test.assertSimilar( toDense(sparse), [2, 0, 6]);
我对代码的解决方案是:

function toDense(sparse){
  function isBoolean(value)
  { 

    if(value >= 0)
    {
      if(!(typeof(value) === 'object'))
        return value;
    }

  }
return sparse.filter(isBoolean);

}

但是我无法将数组设置为[2,0,6],我返回的数组是[2,6]。我的问题是,如果null是一个对象,0是一个数字,为什么0的if条件没有返回值?

您的错误发生是因为您将0返回给筛选函数,该函数的计算结果为false

var-arr=[0,1,2,3];

log(arr.filter(函数(v){return v;}))您的计算被错误的转换绊倒了

替换

if(value >= 0)


这就解决了你的断言。

你的密集数组是什么样子的?@DavidTansey对此表示抱歉。你应该展示如何修复
isBoolean
来解决这个问题。解决方案可以很简单,如
返回typeof(value)==“number”@DTing在看到您的示例后,然后查看MDN文档。。。我终于明白了,谢谢。这个问题的提出方式在toDense()应该返回什么方面有些含糊不清。我不确定我是否想谈谈实施的细节。只是指出导致“缺失”值的原因。
if(value > 0 || value === 0)