Lodash地图功能意外输出

杜赖德

在chrome中使用lodash(截止到今天)。

_.map("0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0".split(":"), parseInt);

我得到:

[0, NaN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

好像是基本操作。

费尔南多

如果您已经在使用Lodash,通常比较安全的做法是将本地方法替换为Lodash方法。

在这种情况下,我将使用_.parseInt而不是just parseInt,因为后者可能会产生意外的结果(在这里就是这种情况)。

预期的工作如下:

_.map("0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0".split(":"), _.parseInt);

如果您对“ vanilla”方法为何parseInt返回感到好奇NaN,我相信正在发生的事情如下:

  1. 使用时_.map(collection, iteratee)iteratee实际上会使用以下三个参数来调用:(item, index, collection)来源在这里
  2. 这里的问题是,当您调用JavaScript的native时parseInt,第二个参数是一个基数,该基数确定应使用哪个基数来解析整数(二进制,八进制,十进制,十六进制等)。因为iteratee是用三个参数调用的,所以这弄乱了您的基数并返回NaN有关MDN如何工作的说明,请参见此处parseInt
  3. Lodash_.parseInt()通过添加后卫来避免该问题通常可以安全地假设Lodash使用这样的防护来保护其方法,以确保您可以在其他Lodash方法中以迭代方式使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章