看到一道笔试题:

['1', '2', '3'].map(parseInt)

这道题目中涉及到 map 和 parseInt 函数的运用,如果对这两个函数的理解不充分的话,是很难思考出正确的结果的。

下面就通过这道题目对 map 和 parseInt 函数作一个简单的理解和分析:

map((item, index, thisArr) => ( newArr ))

【参数解析】
 item: callback 的第一个参数,数组中正在处理的当前元素。
 index: callback 的第二个参数,数组中正在处理的当前元素的索引。
 thisArr: callback 的第三个参数,map 方法被调用的数组。
【返回】
 一个新数组,每个元素都是执行回调函数的结果。

parseInt(string, radix)

【参数解析】
 string: 必需。要被解析的字符串。
 radix: 可选。表示要解析的字符串的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
【返回】
 解析后的数字
【注意】

 1. 只有字符串中的第一个数字会被返回。
// parseInt(' 12abc!6') 12
 2. 开头和结尾的空格是允许的。
// parseInt(' 12x') 12
 3. 如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。
// parseInt('s90') NaN
 4. radix 表示的是当前要解析的字符串的表示进制数,而不是解析的进制数。
// parseInt('3', 2) 表示当前的字符串'3' 是以二进制表示的(当然这是不合规则的,仅为说明问题),而不是将 3 用二进制作转换

【示例】

parseInt("10"); //
parseInt("19",10); // 19 (10+9)
parseInt("11",2); // 3 (2+1)
parseInt("17",8); // 15 (8+7)
parseInt("1f",16); // 31 (16+15)
parseInt("010"); // 10 或 8

['1', '2', '3'].map(parseInt) 解析

通过上述对 map 和 parseInt 函数的分析可以知道,执行方法时,map给parseInt传递了三个参数:

parseInt(item, index, thisArr)

其中第三个参数会被 parseInt 忽略,因此会依次执行:

parseInt('1', 0)
// radix 为 0,默认以十进制解析字符串,返回 1
parseInt('2', 1)
// radix 为 1,不在 2 ~ 36 之间,返回 NaN
parseInt('3', 2)
// radix 为 2, 字符串却为 3,超出二进制的表示范围,因此要解析的字符串和基数矛盾,返回 NaN

综上,最后返回的数组为 [1, NaN, NaN]

【补充】

一些看起来奇怪但实际上解释得通的例子:

parseInt(false, 16)
// parseInt(parseInt, 16)
// parseInt('0x10', 16)
// parseInt('103', 2)
// parseInt(1/0, 19)
//

【参考】

为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

通过 ['1', '2', '3'].map(parseInt) 学习 map 和 parseInt 函数的更多相关文章

  1. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

  2. js parseInt和map函数

    今天看了一个js的题目["1","2","3"].map(parseInt),看到后脑海中浮现的答案是[1,2,3],但是看到正确答案后蒙了 ...

  3. Js笔试题之parseInt()和.map()

    parseInt()的几个例子 var b = parseInt("01"); alert("b="+b); var c = parseInt("09 ...

  4. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  5. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

  6. parseInt和map方法使用案例分析

    ["1","2","3"].map(parseInt) //[1,NaN,NaN] 先看map()方法 定义和用法 map() 方法返回一个 ...

  7. 使用map()的小陷阱:parseInt

    假设我们想要把一个字符串数组的每一项转换成整数,我们很自然就想到了把parseInt作为回调函数传给map()函数,但这样做可能会出现意想不到的结果: var strArr = ["1&qu ...

  8. js map()初步学习

    //array.map(callback,thisObject?),callback需要有return值 //map:'映射' 被映射成新的数组  eg1: let data = [3,4,2]; l ...

  9. ES6中Map数据结构学习笔记

    很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...

随机推荐

  1. 常见linux命令用法介绍

    su switch user 用途:用于用户之间的切换 格式: su - USERNAME切换用户后,同时切换到新用户的工作环境中 su USERNAME切换用户后,不改变原用户的工作目录,及其他环境 ...

  2. 【ASP.NET Core分布式项目实战】(二)oauth2 + oidc 实现 server部分

    本博客根据http://video.jessetalk.cn/my/course/5视频整理(内容可能会有部分,推荐看源视频学习) 资料 我们基于之前的MvcCookieAuthSample来做开发 ...

  3. udev实现热插拔

    一.UDEV是什么? Udev是一个针对Linux内核2.6的可提供自动创建的设备节点和命名的解决方法的一个文件系统:其实与/etc/目录下的fstab文件类似 二.Udev如何获取内核这些模块的变化 ...

  4. Keepalived实战(3)

    一.环境 如上图所示: keepalived的mater为proxy-master,keepalived的slave为proxy-slave. 要求:当mater出现问题时,主动切换到slave上.这 ...

  5. 关于maven项install时报找不到符号的错误

    解决办法: 聚合工程: 1.eclipse中执行project -->clean,将项目清理一下: 2.选中聚和工程右键-->Run As-->Maven builed...--&g ...

  6. CTF---密码学入门第六题 古典密码

    古典密码分值:10 来源: 北邮天枢战队 难度:易 参与人数:5115人 Get Flag:1549人 答题人数:1783人 解题通过率:87% 密文内容如下{79 67 85 123 67 70 8 ...

  7. BZOJ3997: [TJOI2015]组合数学(网络流)

    3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 405  Solved: 284[Submit][Status ...

  8. 二叉排序树BST+求树深度算法

    #include "stdio.h" #include "malloc.h" typedef struct node { int key; struct nod ...

  9. hdu_2087 剪花布条(kmp)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. python基础1 day2

    一.上节课回顾1. 编译型: 将源码一次性全部编译成二进制. C 优点:执行效率高. 缺点:开发效率慢,不可跨平台使用. 解释型: 当程序执行时,代码一行一行的去解释成二进制. python 优点:开 ...