无法读取 null 的属性“length”-JavaScript
我无法完成 codewars 上最简单的 kata 之一。 想知道我错在哪里!
Instructions: Sum all the numbers of the array except the highest and the lowest element (the value, not the index!). (The highest/lowest element is respectively only one element at each edge, even if there are more than one with the same value!) If array is empty, null or None, or if only 1 Element exists, return 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: Cannot read property 'length' of null
我尝试添加第一个 if
typeof array != 'null', typeof array != 'undefined'
但它没有帮助...
在 Javascript 中,null 的 typeof 返回将是一个对象。这就是您的第一个 if 不起作用的原因。您检查它是否不等于 null,如果为 true,因为返回的将是对象。请在此处阅读更多信息 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)。 (我还没有读到太多关于为什么的内容)。
if(typeof array !== "undefined" && typeof array !== "null" )
你可以试试这个。
像这样检查。
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);
}
}