为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
来源:互联网 发布:淘宝店铺背景怎么设置 编辑:程序博客网 时间:2024/06/11 17:33
在 javascript 中 ["1", "2", "3"].map(parseInt) 为何返回不是 [1,2,3] 却是 [1,NaN,NaN]?
我们首先回顾一下 parseInt() 个 map() 两个函数的用法:
parseInt() 函数
定义和用法
parseInt() 函数可解析一个字符串,并返回一个整数。
语法
可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 `0`,则数字将以 10 为基础来解析。如果它以 `"0x"` 或 `"0X"` 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 `parseInt()` 将返回 `NaN`。
返回值
返回解析后的数字。
说明
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例:
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
提示和注释
注释:只有字符串中的第一个数字会被返回。
注释:开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。
实例
在本例中,我们将使用 parseInt() 来解析不同的字符串:
map 方法
对数组的每个元素调用定义的回调函数并返回包含结果的数组。
返回值
其中的每个元素均为关联的原始数组元素的回调函数返回值的新数组。
异常
如果 callbackfn 参数不是函数对象,则将引发 TypeError 异常。
备注
对于数组中的每个元素,map 方法都会调用 callbackfn 函数一次(采用升序索引顺序)。 不为数组中缺少的元素调用该回调函数。
除了数组对象之外,map 方法可由具有 length 属性且具有已按数字编制索引的属性名的任何对象使用。
回调函数语法
回调函数的语法如下所示:
可使用最多三个参数来声明回调函数。
下表列出了回调函数参数。
修改数组对象
数组对象可由回调函数修改。
下表描述了在 map 方法启动后修改数组对象所获得的结果。
示例
下面的示例阐释了 map 方法的用法。
下面的示例阐释 thisArg 参数的用法,该参数指定对其引用 this 关键字的对象。
在下面的示例中,内置 JavaScript 方法用作回调函数。
[9, 16].map(Math.sqrt) 回调函数,输出的结果是 [3, 4]。
但是为什么 ["1", "2", "3"].map(parseInt) 却返回 [1,NaN,NaN]?
网站给出的提示是:
what you actually get is [1, NaN, NaN] because parseInt takes two parameters (val, radix) and map passes 3 (element, index, array)
简单翻译一下就是
parseInt 需要 2 个参数 (val, radix), 而 map 传递了 3 个参数 (element, index, array)」。
通过上面的解释,我们可以看出,如果想让 parseInt(string, radix) 返回 NaN,有两种情况:
第一个参数不能转换成数字。
第二个参数不在 2 到 36 之间。
我们传入的参数都能转换成数字,所以只能是第二种可能。
到底是不是呢?我们重新定义 parseInt(string, radix) 函数:
输出结果为:
看见,map 函数将数组的值 value 传递给了 parseInt 的第一个参数,将数组的索引传递给了第二个参数。
第三个参数呢?我们再加一个参数
输出结果:
我们再继续增加参数:
输出结果:
第四个参数为 undefined,看见 map 确实为 parseInt 传递了三个参数。就像作者写道的:
数组的值
数组的索引
数组
(全文完)
- 为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
- 为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
- ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]
- 面试题:为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
- ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]而不是[1,2,3]
- 解惑 ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]
- nan
- NaN
- NaN
- NaN
- NaN
- [1,2,3].map(parseInt)
- ["1", "2", "3"].map(parseInt)
- JavaScript的NaN为什么不等于NaN
- IE下getTime()返回NaN
- IE下getTime()返回NaN
- jqGrid 时间显示成NaN-NaN-NaN NaN:NaN:NaN
- python的nan,NaN,NAN
- openstack 命令行管理八 - 服务管理 (备忘)
- J2EE——Jsp的学习
- eclipse中文乱码问题解决
- 解决MySQL查询不区分大小写
- iOS:hidesBottomBarWhenPushed的正确用法
- 为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
- 安装pip
- linux命令制作iso镜像
- 查看电脑已安装的.Net Framework版本
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- The C++ Programming Language
- 破译邮件 Form SDJZU.acmclub.com
- 九度OJ 1442 A sequence of numbers
- java开发常用功能的实现