侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

JavaScript中parseInt()深度解析

2022-06-12 星期日 / 0 评论 / 0 点赞 / 162 阅读 / 3314 字

浏览器代码解析器:parseInt里面有两个参数,第二个参数是十六进制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)。parseInt中第二个参数 radix 是介于2-36的数, 计算机中 0到9为十进制,再往上十一进制开始用字母表示那么26个字母就可以再十进制上面加多26个进制,即三十六进制。

语法:parseInt(string [ , radix])参数:string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。radix:一个2到36之间的整数值,用于指定转换中采用的基数。

如果省略该参数或者为0,则数字将以 10 为基础来解析。
如果string以 “0x” 或 “0X” 开头,将以 16 为基数。
如果string以“0” 开头,在ECMA3中被认为是8进制;但是在ECMA5中已经强制规定此情况默认是10进制
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

请看下面几行代码的运行结果:

console.log(parseInt(1/0,19)) //18console.log(parseInt(false,16)) //250console.log(parseInt(parseInt,16)) //15console.log(parseInt('0x10')) //16console.log(parseInt('10',2)) //2
看到这些既熟悉又陌生的代码,一开始也一样看不懂,但是我后面进行试验分析好最终解决了这几个问题,好的,马上进入我试验分析
console.log(parseInt(1/0,19))
浏览器代码解析器:parseInt里面有两个参数,第二个参数是十九进制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i),额,1/0,好吧先运算 结果等于Infinity,I好的十九进制有认识,n十九进制不存在不认识,不管后面有没有了,立即返回i(i对应的十进制中的18),所以返回18。
console.log(parseInt(false,16))
浏览器代码解析器:parseInt里面有两个参数,第二个参数是十六进制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),额,false,是字符串(parseInt的世界里没有布尔值)==> 'false',
嗯,'f'认识, 'a'认识, 'l'哦,不认识,立即返回fa (十六进制的fa转换成十进制等于250)。
console.log(parseInt(parseInt,16))
浏览器代码解析器:parseInt里面有两个参数,第二个参数是十六进制(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),额,parseInt,是我自己吗?不对,它后面没有(),它不是执行函数,
好的,我先将它console.log(parseInt)看看, function parseInt(),嗯,好的,又是字符串 ==> 'function parseInt()' , 'f'认识, 'u'不认识,立即返回f (十六进制的f转换成十进制等于15)。
console.log(parseInt('0x10'))
浏览器代码解析器:parseInt里面只有一个参数,好的,采用默认的十进制(0,1,2,3,4,5,6,7,8,9), '0x',额,这个我认识,是十六进制的写法,好的,
十六进制的10转换成十进制等于16。
console.log(parseInt('10',2))

浏览器代码解析器:parseInt里面有两个参数,第二个参数是二进制(0,1),好的, '1'认识, '0'认识 ,嗯,返回二进制的10 转换成十进制等于2
好的,我的分析完毕。

现在总结一下,理解了parseInt中第二个参数 radix 是介于2-36的数, 计算机中 0到9 为十进制,再往上十一进制开始用字母表示,那么26个字母就可以在十进制上面加多26个进制,即三十六进制。

广告 广告

评论区