在下面的Javascript数组场景中,parseInt()和Number.isInteger()的效果有什么不同?

在下面的Javascript数组场景中,parseInt()和Number.isInteger()的效果有什么不同?,javascript,syntax,parseint,code-organization,Javascript,Syntax,Parseint,Code Organization,我正在处理freecodecamp.org的Javascript ES6编码问题,其中一个问题让我使用箭头函数表示法: 以实数数组为例 仅将正整数过滤到新数组中,然后 将这些正整数平方 我已经成功地完成了这个问题,但通过使用数字过滤原始数组,为步骤2构建了代码。isInteger()。org提供的答案利用了parseInt() 我不明白为什么我们需要解析已经是整数的整数,也不明白为什么parseInt()不会抛出错误,因为它的参数要求一个字符串 我的主要问题是:两者都可以接受吗?一个会让我在今后

我正在处理freecodecamp.org的Javascript ES6编码问题,其中一个问题让我使用箭头函数表示法:

  • 以实数数组为例
  • 仅将正整数过滤到新数组中,然后
  • 将这些正整数平方
  • 我已经成功地完成了这个问题,但通过使用数字过滤原始数组,为步骤2构建了代码。isInteger()。org提供的答案利用了parseInt()

    我不明白为什么我们需要解析已经是整数的整数,也不明白为什么parseInt()不会抛出错误,因为它的参数要求一个字符串

    我的主要问题是:两者都可以接受吗?一个会让我在今后遇到更多的麻烦吗

    我发现的唯一密切相关的stackoverfow是(这有点帮助)。下面是我的代码,后面是freecodecamp.org提供的答案代码。注意:我知道我的代码中有一些额外的步骤。我不是一个箭头符号的超级粉丝,我还在改进我的代码组织


    我的代码::


    提供的答案代码::


    这些文档有点误导人,
    parseInt
    的第一个参数不一定是字符串。查看,第一个参数转换为字符串作为第一步:

    调用parseInt函数时,将执行以下步骤:

  • 让inputString成为字符串(string)
  • parseInt
    的一个问题是,如果它有前导零,则在某些(旧)浏览器中可能会被解释为零,在其他(新)浏览器中可能会被解释为10进制。因此,如果您希望支持上述旧浏览器,最好始终提供基数(作为第二个参数)或使用
    Number

    也就是说,在这种特殊情况下,这没有什么区别,因为对一个数字调用
    parseInt
    永远不会导致前导零


    尽管如此,我认为推荐的答案有点误导-因为你知道测试中使用的数字总是肯定的,所以使用
    Math.floor
    parseInt
    更合适,因为你只是想得到floored值,不尝试将字符串转换为数字。

    parseInt尝试将传递给它的值转换为整数,如果您使用此参数调用它,它将以数字形式返回值30。如果使用无法转换为整数的值调用它,例如
    parseInt(“hello world”)
    它将返回NaN

    Number.isInteger验证给定值是否为返回true或false布尔值的整数
    Number.isInteger(1)
    将返回true,
    Number.isInteger(“hello world”)
    Number.isInteger(3.14)
    将返回false

    如果整数已经是整数,我不明白为什么我们需要解析它们

    你不需要。这是对
    parseInt
    的滥用。他们应该使用
    Math.floor
    来代替他们的预期用途

    为什么
    parseInt()

    因为它是一个旧的API,而且非常宽松。它不是抛出错误,而是将其参数强制为字符串,然后尝试解析该字符串

    我的主要问题是:两者是否都能被同等接受


    不,
    parseInt
    绝对不可接受。您使用
    isInteger
    找到了更好的解决方案。他们没有使用它的原因可能是
    isInteger
    是一个相对较新的功能,与ES6一起添加。

    您可以通过编辑来格式化文章中的代码。有一些按钮可以将其格式化为代码。这使得人们更容易理解“我不太喜欢箭头符号”,那你为什么要做
    constcheckelement=(value)=>
    而不是
    函数checkElement(value){return…;}
    ?:-P@Todd谢谢你的澄清和为我做的一切!我一直在想办法,从现在开始我会用的@贝吉;学会(freecodecamp)对编码问题的一个要求是使用箭头符号,作为我了解它的一种手段。
    const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
    
    const squareList = (arr) => {
    
    "use strict";
    
    // dictates what numbers are filter()'d out of original array
    
    const checkElement = (value) => value > 0 && Number.isInteger(value) == true;
    
    const integersOnly = arr.filter(checkElement); //filters ONLY positive integers into new array
    
    const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
    
    const squareList = (arr) => {
    
    "use strict";
    
    const squaredIntegers = arr.filter( (num) => num > 0 && num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );