该问题采用非负整数和字符串列表并返回新的数字数组。
const filterlist = [1, 2, "a", "b", 0];
function filter_list(l) {
let arrayResult = [];
for (const iteml of l) {
if (parseInt(iteml)) {
arrayResult.push(iteml);
}
}
return arrayResult;
}
const res = filter_list(filterlist);
for (let i = 0; i < res.length; i++) {
console.log(res[i]);
}
// console.log(parseInt(0));
这样做时,结果发现只解析了 1 和 2,而 0 仍然悬而未决,但是为什么当我将转换带到控制台(注释行)时,它显示这是一个数字。我知道零是一个错误值,但是我该如何绕过它呢?
typeof'number' 是当变量或值的类型为 number 时运算符返回的字符串。检查
typeof item === 'number'可以相应地判断变量是否为数字0;===在这种情况下,它执行严格的比较,检查类型和值。但这里重要的是要记住这
NaN也是一个数字,因此您可以添加如果我们想考虑字符串数字,我们还可以添加一个检查
!isNaN(parseFloat(item))检查字符串是否可以转换为数字,并isFinite()排除诸如Infinity和 之类的无限值-Infinity。但请记住,parseFloat()/parseInt()它可以正确转换以数字开头的字符串,即使它们后面跟着其他字符,并且我们需要了解我们需要的它,或者如何(例如,123bukvi=>123)。为了避免这种情况,您可以使用额外的检查...要解决这个问题,只需通过附加检查来扩展条件:
在这种情况下,
iteml === 0随意另外检查第二个条件。之前代码中 if (parseInt(iteml)) 条件对 0 不起作用的原因是因为在 JS 中:
因此,当检查 if 时,当结果为 0 时,尽管 parseInt(0) 返回了正确的数字,但条件失败。
这就是 JS 使用解释 0 的方式。