无法读取null的属性“长度”-JavaScript

时间:2019-07-18 12:50:10

标签: javascript

我无法完成Codewar上最简单的kata之一。 想了解我在哪里错了!

  

指令:对数组的所有数字求和,除最高和   最低的元素(值,而不是索引!)。 (最高/最低   元素在每个边缘处分别只是一个元素,即使存在   多个具有相同值!)如果数组为空,则为null或   无,或者如果仅存在1个元素,则返回0。

function sumArray(array) {
  var finalSum = 0;
  if (array != null || !array) {

    for (var i = 0; i < array.length; i++) {
      finalSum += array[i];
    }
    if (array.length === 0 || array.length <= 1) {
      return 0;
    } else {
      return finalSum - Math.max(...array) - Math.min(...array);
    }
  }
}

一切似乎都不错,应该可以,但是它没有通过最终测试。

  

TypeError:无法读取null的属性“ length”

我尝试在第一个if typeof array != 'null', typeof array != 'undefined'中添加,但没有帮助...

3 个答案:

答案 0 :(得分:0)

if(typeof array !== "undefined" && typeof array !== "null" )

您可以尝试一下。

答案 1 :(得分:0)

这样检查。

if(array && array.length) {
    for (var i = 0; i < array.length; i++) {
        finalSum += array[i];
    }
    if (array.length === 0 || array.length <= 1) {
        return 0;
    } else {
        return finalSum - Math.max(...array) - Math.min(...array);
    }

}

答案 2 :(得分:0)

在Javascript中,null的typeof返回将是一个对象。这就是为什么您的第一个if不起作用的原因。您检查它是否不等于null以及它是否为true,因为返回将是object。在ECMAScript null处了解更多信息。

对此有更多证明,请拔出控制台并输入以下内容。

a = null
typeof array // will return "object" 
a != null // will return false, even if we attributed the value of a to null.
a !== null // will false also
a == null // will return true, so let's use this !

我假设您遇到的错误是测试为sumArray(null)或sumArray()时。为了正确返回0,您必须执行此操作。

function sumArray(array) {
  var finalSum = 0;
  if (array == null) 
      return 0;
  if (array != null || !array) {

    for (var i = 0; i < array.length; i++) {
      finalSum += array[i];
    }
    if (array.length === 0 || array.length <= 1) {
      return 0;
    } else {
      return finalSum - Math.max(...array) - Math.min(...array);
    }
  }
}

出于某些奇怪的原因,使用array == null将返回正确的返回值(如果数组为null,则为true)。 (关于原因,我还没有读懂。)