簡體   English   中英

為什么映射“parseInt”無點樣式不能按預期工作?

[英]Why doesn't mapping over `parseInt` point-free style work as expected?

我在 Node.JS 控制台中運行以下命令:

> ["30", "31", "32"].map(x => parseInt(x))
[ 30, 31, 32 ]
> ["30", "31", "32"].map(parseInt)
[ 30, NaN, NaN ]

為什么這些表達方式不一樣? 以無點樣式調用 function 與任意 function 是否存在語義差異?

parseInt接受兩個 arguments:數字字符串和基數。 Array#map將元素和索引作為前兩個 arguments 提供給它的回調,這使得一些數字無法解析(主要原因可能是有數字對指定的基數無效,例如數字 2 時將字符串解析為二進制),結果為 NaN。 可以使用數字 function 來避免這個陷阱,因為它忽略了除第一個之外的所有 arguments。

["30", "31", "32"].map(Number)

 ["30", "31", "32"].map(function(){ console.log(arguments); });

該問題很可能與 map 將不僅僅是元素傳遞給回調有關。 它傳遞元素、索引和整個數組。 因此,如果您讓 map 將所有這些傳遞給parseInt方法,則索引很可能會導致該方法知道如何將字符串轉換為相關基數的數字。

您傳遞給map的 function 實際上從map獲取三個參數:元素、索引和整個列表。

在您的第一個示例中,您顯式綁定x並將其傳遞給parseInt ,它需要兩個 arguments、字符串和格式。 如果您保留格式 null,則默認為基數 10。

在第二個示例中,您將 map 發送的map直接發送到parseInt ,這告訴parseInt使用索引作為第二個參數。

> ["30", "31", "32"].map(console.log)
30 0 [ '30', '31', '32' ]
31 1 [ '30', '31', '32' ]
32 2 [ '30', '31', '32' ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM