前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >['1','2','3'].map(parseInt)的返回值是什么?你真的了解基数radix吗

['1','2','3'].map(parseInt)的返回值是什么?你真的了解基数radix吗

作者头像
德顺
发布2022-01-18 13:58:41
7080
发布2022-01-18 13:58:41
举报
文章被收录于专栏:前端资源前端资源

['1', '2', '3'].map(parseInt) 的返回值是什么?很多人的第一反应是 [1, 2, 3] ,但是结果并非如此。

代码语言:txt
复制
 真正的结果是 `[1, NaN, NaN]` 为什么?我们慢慢往下看: 

map 方法:

MDN 给出的解释是:map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。

map() 方法按照原始数组元素顺序依次处理元素。

注意: map() 不会对空数组进行检测、不会改变原始数组。

代码语言:javascript
复制
const arr = [1, 4, 9, 16];
const map = array1.map(x => x * 2);
console.log(map); // [2, 8, 18, 32]

map 方法可以接受一个函数,来遍历处理数组中的元素:

语法:

代码语言:javascript
复制
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
 // Return element for new_array}[,thisArg])

thisArg(可选):执行 callback 函数时值被用作 this

函数callback)可以接受三个参数

currentValuecallback 数组中正在处理的当前元素。

index(可选):callback 数组中正在处理的当前元素的索引。

array(可选):map 方法调用的数组。

代码语言:txt
复制
 简单示例: 
代码语言:javascript
复制
var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
  return num * 2;
});

// doubles数组的值为: [2, 8, 18]
// numbers数组未被修改: [1, 4, 9]

parseInt 函数:

parseInt(string, radix) 解析字符串,并返回指定基数的十进制整数radix 是 2-36 之间的整数,表示被解析字符串的基数。

语法:

代码语言:javascript
复制
parseInt(string, radix);

parseInt() 可以接受两个参数:

string 要被解析的值。如果参数不是一个字符串,则将其转换为字符串,字符串开头的空白符将会被忽略。

radix 可选:

  • 表示要解析的数字的基数。该值介于 2 ~ 36 之间。
  • 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 `"0x"` 或 `"0X"` 开头,将以 16 为基数。
  • 如果该参数小于 2 或者大于 36,则 `parseInt()` 将返回 `NaN`。
代码语言:javascript
复制
praseInt('1') // 1
parseInt('1', 0) // 111
// radix 为空或 0 的时候,按 16/8 进制解析,但是如果开头是 1-9 就按 10 进制解析
parseInt('2', 1) // NaN ( radix参数小于 2 或者大于 36,则 parseInt() 将返回 NaN)
parseInt('3', 2)(radix的参数是 2,所以按二进制解析,而二进制最大为 1,只能为 0、1, 3 显然超了,转换不了,所以是NaN)
var num1 = parseInt("10",2); //2 (按二进制解析)
var num2 = parseInt("10",8); //8 (按八进制解析)
var num3 = parseInt("10",10); //10 (按十进制解析)
var num4 = parseInt("10",16); //16 (按十六进制解析)
代码语言:txt
复制
 看到这里,大家可能会说了,这个 `radix` 可不就是进制吗! 
代码语言:txt
复制
 别着急,我们在看一个示例: 
代码语言:txt
复制
 既然 `radix` 代表进制,6 进制里为什么能有 7,还有 8 ?,8 进制为什么能有 9 ? 
代码语言:txt
复制
 看来事情并没有那么简单,我们来看一下。 

radix 基数是什么:

百度百科给出的解释是:

代码语言:txt
复制
 基数(cardinal number)在数学上,是集合论中刻画任意集合大小的一个概念。两个能够建立元素间一一对应的集合称为互相对等集合。例如 3 个人的集合和 3 匹马的集合可以建立一一对应,是两个对等的集合。 
代码语言:txt
复制
 称两个集 M 与 N 为有相同基数,即|M|=|N|,若存在双射φ:M→N。且|M|≤|N|,若存在单射φ:M→N。 
代码语言:txt
复制
 越看越懵逼了呢,不去管他了! 
代码语言:txt
复制
 我们再看几个示例: 

parseInt('45', 5) 当解析 45 时,4 属于范围内,所以得到 4,但是 5 不属于,所以走到这里直接把后面抛弃掉,相当于 parseInt('4', 5); ---最终得到 4

parseInt('454', 5) 当解析 454 时,4 属于范围内,所以得到 4,但是 5 不属于,所以走到这里直接把后面全部抛弃掉, 相当于 parseInt('4', 5); ---最终得到 4。 

parseInt('44', 5) 当解析 44 时,4 属于范围内,后面那个 4 还是在范围内,所以,算作一个整体,属于正常,不进行任何操作   根据进制算法,最终算出,从右往左 4*5^0+4*5^1 = 24

parseInt('445', 5) 当解析 445 时,4 属于范围内,后面那个 4 还是在范围内, 但是在后面的 5 不属于, 所以,5 抛弃掉,只取 44,相当于 parseInt('44', 5); , 根据进制算法,最终算出,从右往左 4*5^0+4*5^1 = 24

parseInt('544', 5) 当解析 544 时,5 直接不属于范围内,所以全部抛弃掉,只取 '', 相当于 parseInt('', 5); 返回 NaN

parseInt('5', 5) 当解析 5 时,5 直接不属于范围内,所以全部抛弃掉,只取 '', 相当于 parseInt('', 5); 返回 NaN

代码语言:txt
复制
 看到这,应该可以理解 `radix` 的含义了吧,并不是简单的进制计算。 

未经允许不得转载:w3h5 » ['1','2','3'].map(parseInt)的返回值是什么?你真的了解基数radix吗

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • map 方法:
  • parseInt 函数:
  • radix 基数是什么:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档