繁体   English   中英

在以下Javascript数组方案中,parseInt()和Number.isInteger()之间的功效差异?

[英]Difference in efficacy between parseInt() and Number.isInteger() in following Javascript array scenario?

我正在研究freecodecamp.org的Javascript ES6编码问题,其中一个任务要求我使用箭头功能符号来:

  1. 取一个实数数组。
  2. 仅将正整数过滤到新数组中,然后
  3. 平方那些正整数。

我已经成功完成了该问题,但是通过使用Numbers.isInteger()过滤原始数组来构建了步骤2的代码。 Freecodecamp.org提供的答案利用parseInt()。

我看不到为什么如果整数已经是整数就需要解析整数,也为什么parseInt()不会因为参数要求输入字符串而引发错误。

我的主要问题:两者是否都可以接受? 有人会让我在途中遇到更多麻烦吗?

我发现的唯一紧密相关的stackoverfow在这里 (对您有所帮助)。 以下是我的代码,然后是freecodecamp.org提供的答案代码。 注意:我知道我的代码中还有一些额外的步骤。 我不是箭头表示法的忠实拥护者,并且仍在改善我的代码组织!


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) );

该文档是有点误导-第一个参数parseInt 不必是一个字符串。 看一下规范 ,第一步将第一个参数转换为字符串:

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

  1. 令inputString为ToString(string)。

parseInt的问题之一是,如果它具有前导零,则在某些(旧)浏览器中可能被解释为八进制 ,而在其他(较新)浏览器中则可能被解释为以10为底。 因此,如果要支持上述旧浏览器,最好总是提供一个基数(作为第二个参数)或改用Number

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

不过,我认为建议的答案还是有误导性的-因为您知道测试中使用的数字始终为正,因此使用Math.floor不是parseInt会更适合于此目的,因为您只是尝试获取下限值,而不是尝试将字符串转换为数字。

parseInt尝试将您传递给它的值转换为整数,如果使用此参数parseInt("30")调用,它将返回给您一个数字30。 如果使用无法转换为parseInt("hello world")之类的整数的值进行调用,它将返回NaN。

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

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

不用了 这是对parseInt滥用。 他们应该将Math.floor用作其预期目的。

为什么parseInt()不会因为参数要求输入字符串而引发错误?

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

我的主要问题:两者是否都可以接受?

不, parseInt是绝对不能接受的。 您使用isInteger找到了更好的解决方案。 他们不使用它的原因可能是isInteger是ES6中新增的一个相对较新的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM