parseInt详解-你以为radix指的进制吗?

最终结论

大家都认为parseInt(String,radix)的radix就是进制数,其实根本就不是这样!!!


前言

为什么会研究parseInt呢?

因为我在研究js的时候,惊讶的看到了这个问题,哇 这个题出的真的,你像个鬼一样

突然觉得还有这种骚写法,惊讶之余就是,那这结果到底是什么?

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

我开始以为结果是 1,2,3 不就是转成整数吗?这个简单,你这不是在哄孩子吗,hhhh教练我会这个!

结果控制台一输,知道结果的我眼泪掉下来


果然,还是我太年轻,于是我开始疯狂分析



一、map函数

定义和用法

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

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

注意: map() 不会对空数组进行检测。

注意: map() 不会改变原始数组。

首先,我们来看一下map函数的参数

array.map(function(currentValue,index,arr), thisValue)

我们这里主要研究map的第一个参数

它是一个匿名函数,有三个参数,分别是(当前元素,当前遍历的元素索引,和原数组)

这个题目呢,我们传入了一个parseInt函数,也就是相当于

array.map(parseInt(currentValue,index));   //由于parseInt只接受两个参数,所以arr被舍弃

所以这个题目

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

变成了这样

parseInt('1',0);       // 1

parseInt('2',1);       // NaN 

parseInt('3',2);      // NaN 

可是这是为什么呢???

接着我们开始分析今天的主角parseInt



二、parseInt函数

parseInt的手册是这样说的

parseInt() 函数可解析一个字符串,并返回一个整数。

语法:parseInt(string, radix)


我们这里重点关心radix这个是个什么东西

1、radix可选。

2、表示要解析的数字的基数。该值介于 2 ~ 36 之间。

3、如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

4、如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

这是官方的说法。

作为学渣的我瞬间蒙了,这个基数是什么东西?这是?数学知识???

在学习数学知识之前,想起来手头有一本红宝书(JavaScript高级语言设计),这可是咱花了大几十大洋买的,要去查查,于是我在

第三章---基本概念---Number类型---4数值转换------里找到了关于parseInt的说明(31-32页)

结果书里举了很多例子--原书例子

指定的基数会影响转换的输出结果。例如:

var num1 = parseInt("10",2);          //2 (按二进制解析)

var num2 = parseInt("10",8);          //8 (按八进制解析)

var num3 = parseInt("10",10);        //10 (按十进制解析)

var num4 = parseInt("10",16);         //16 (按十六进制解析)

看到这里我就明白了,噢~原来是进制啊,那还搞什么鬼,直接说进制不就好了吗,为什么还要说基数?搞一些花里胡哨的。看到这里请继续看完,事实告诉我,我又年轻了 

那这这个题目好做了嘛, 不就是这样的吗

parseInt('1',0);       // 1   //radix是0的时候,按16/8进制解析,但是如果开头是1-9就按10进制解析,所以是1

parseInt('2',1);       // NaN  // radix参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

parseInt('3',2);      // NaN   // radix的参数是2,所以按二进制解析,而二进制最大为1,只能为0,1, 3显然超了,转换不了,所以是NaN

这个题目是解出来了,但是!

你以为有这么简单吗???

正当我快乐的时候!

我开始思考,基数是什么???这明明就是进制数,为啥是基数???

官方是智障吗?不,我更愿意相信我是智障!

于是我又去测试了一波


??????????

我懵了,6进制里为啥能有7,为啥还有8,8进制为什么能有9,为什么写一位就NaN???

为什么写两位数就有结果,结果还这么奇怪?

完全傻掉,我麻了爪子

不就是基数吗我去百度还不成吗

百度百科

百度之后我就更傻了,这是什么东西哇

陷入了恐慌,js这么难吗???

于是我又到处查阅了资料得到了结果!


三、最终结论


大家都认为radix就是单纯的就是进制数,其实根本就不是这样!!!

大家都认为radix就是单纯的就是进制数 , 其实根本就不是这样!!!

大家都认为radix就是单纯的就是进制数 , 其实根本就不是这样!!!


它还是做了内部处理的!

我们用5为例

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


你看,这才是完成的嘛,这就对了嘛,这就研究完了嘛,多有意思,

虽然我觉得一点用都没有,但是我就不喜欢你那种你自己都没摸清楚,到处去帮别人科普,最后大家都不知道什么是对的!写科普,一定要严谨嘛~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 原文作者:justjavac原文地址:http://justjavac.com/javascript/2014/0...
    飞鱼YE阅读 485评论 0 2
  • 例题: [1,2,3].map(parseInt) 先看看 map 和 parseInt 用法 Array.pro...
    U17阅读 507评论 0 0
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,568评论 0 7
  • @转自GitHub 介绍js的基本数据类型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou阅读 1,140评论 0 0
  • 时光飞逝,这不第10周都已经结束了,迎来了周末加“5.1”小长假。预祝自己及家人过一个愉快的假日! 感赏时代的发展...
    灿烂阳光1阅读 192评论 0 4