【发布时间】:2022-12-10 12:57:12
【问题描述】:
代码的思路很简单:检查参数类型,如果是数字,则将所有数字相加。如果类型是包含数字的字符串,则从字符串中提取数字并将其添加到提取的其他数字中。如果根本没有数字,只有字符串,则在控制台返回消息:"All are strings"。
let result = 0;
function specialMix(...data) {
for (let i = 0; i < data.length; i++) {
if (typeof data[i] === "number") {
result += data[i];
} else if (typeof data[i] === "string") {
if (typeof parseInt(data[i]) === "number") {
result += parseInt(data[i]);
} else if (typeof parseInt(data[i]) === "NaN") {
continue;
} else if (result === 0) {
console.log("All are strings");
}
}
}
return result;
}
console.log(specialMix(10, 20, 30)); // 60
console.log(specialMix("10Test", "Testing", "20Cool")); // 30
console.log(specialMix("Testing", "10Testing", "40Cool")); // 50
console.log(specialMix("Test", "Cool", "Test")); // All are Strings
代码的第一个测试(console.log)有效并给出了所需的结果,但其余测试给出了NaN,我不明白为什么会这样。我不明白代码的逻辑有什么问题。
【问题讨论】:
-
您在函数外定义了
let result。因此它将在通话之间共享,一旦它是NaN,它就永远不会重置。 -
另外,
typeof(NaN) === 'number'。你想要Number.isNaN(x)代替。 -
实际上,变量是在函数外声明的。
-
打字错误,它定义在外面,但需要在里面
-
我试图在函数内部声明变量,但我得到了相同的结果。
标签: javascript function loops