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