首页 > 解决方案 > TypeError:无法读取 null 的属性“长度”,我该如何解决?

问题描述

我仍在学习 javascript 并练习我正在从 codewars.com 做一系列练习,但我遇到了其中一个问题。请求如下:给定一个整数数组。

返回一个数组,其中第一个元素是正数的计数,第二个元素是负数的总和。

如果输入数组为空或 null,则返回一个空数组。

对于输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15],您应该返回 [10, -65]。

我制作了以下算法,适用于所有情况:

function countPositivesSumNegatives(input) {
  var arrOutput = []; //declare the final array
  var pos = 0; //declare the positive 
  var neg = 0; //declare the negative
  var check, ss;

  for (var x = 0; x < input.length; x++){
    if(input[x]>0){ pos++; }
    else{ neg = neg + input[x] ; }
    arrOutput = [pos, neg]
  }
  
  return arrOutput;
}

但它返回我以下错误:

TypeError: Cannot read property 'length' of null
    at countPositivesSumNegatives (test.js:8:29)
    at Context.<anonymous> (test.js:39:18)
    at processImmediate (internal/timers.js:461:21)

由于这个错误,我无法通过测试。我该如何解决它,为什么它会给我这个错误?

标签: javascriptarrayslistalgorithm

解决方案


因此,如果我们使用等于 null / undefined 的输入调用您的函数:

function countPositivesSumNegatives(input) { // input = null
  var arrOutput = []; // OK
  var pos = 0; //OK 
  var neg = 0; //OK
  var check, ss; // OK

  for (var x = 0; x < input.length; x++){ // error is here
  ...

在 JS 中,null 被定义为:“表示有意不存在任何对象值的原始值”

所以当你尝试访问 null 的成员时,JS 会抛出一个错误,因为 null 没有成员。

您有一个用于检查的变量,但您应该为该检查编写代码以查看输入是否等于您提到的任何非法值。

一个简单的蛮力解决方案是检查输入是否等于任何非法值。例如

if (input === null || input === undefined || input === []) return []

for循环之前。


推荐阅读