javascript - 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)
由于这个错误,我无法通过测试。我该如何解决它,为什么它会给我这个错误?
解决方案
因此,如果我们使用等于 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
循环之前。
推荐阅读
- ms-access - Access 2016 - 选择唯一的非重叠日期
- javascript - 重新启动 gif 而不在 IE11 中重新加载它
- android - AsyncTask doInBackground(); 一个一个地执行多个方法
- javascript - RN TextInput/NB 输入一段时间后变慢
- log4j2 - CommonsRequestLoggingFilter 未在我的 Spring Web 反应式应用程序中使用 log4j2 配置进行日志记录
- filter - 突出显示和筛选 Power BI Desktop 的结果不同
- asp.net-mvc - .Net实体框架忽略基于ConnectionString的约束
- graphviz - 如何使用graphviz在一张图中绘制两棵树,一棵从上到下,另一棵从下到上
- django - Django计算组内的百分比
- python - 如何定义没有小数点的边界数 - Choropleth