簡體   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