JS 进制转换的理解
该事情的由来是来自于一个面试题,题目是这样的,[1,2,3].map(parseInt)的结果是什么?
作为菜鸟的我们一定是觉得分别把1,2,3分别交给parseInt,无非就是1,2,3嘛。其实结果输出是这样的,1,NaN,NaN,为什么会这样?
那就涉及到两个知识点了,首先map的时候,里面传一个函数,那么map会默认给函数传两个参数:value,index,那么这两个参数传给parseInt的时候,代表的意思就不一样了,parseInt函数接收两个参数第一个是要转换的字符串,第二个是代表的按几进制进行转换,注意:是按几进制进行转换,而不是转成了几进制。
那么再来看[1,2,3].map(parseInt),
第一次循环,传给parseInt(1,0),把1按0进制转换,0默认表示10进制,然后输出1。
第二次循环,传给parseInt(2,1),把2按1进制转换,引擎懵逼了,1进制中根本不可能出现2这个数字好吗?我咋给你解析,无法解析,给了个NaN。
第三次循环,传给parseInt(3,2),把3按2进制转换,引擎又懵逼了,啥玩意儿?2进制中根本不可能出现3这个数字好吗?我咋给你解析,无法解析,又给了个NaN。
parseInt第二个参数的范围是为介于2-36之间的数。
那么我如果就想把一个十进制的数,转换成固定的进制数呢?比如我想把8转换成2进制数, 应该是1000,怎么做?
那就应该使用Number.prototype.toString(radix),radix表示的也是要转成几进制,范围是介于2-36之间的数。
var a = 8; a.toString(2);或者(8).toString(2);或者Number(8).toString(2);
注意调toString的时候,必须保证调用者是Number类型,因为只有Number原型下的toString方法才支持radix转换,其他的像Object.prototype.toString,String.prototype.toString,Array.prototype.toString,Function.prototype.toString等等,都不接受参数,所以要使用该方法之前需要将调用者转成Number类型。
最新文章
- Django基础,Day10 - template 模板引擎与路径设置
- nginx反向代理、根据浏览器分离访问
- [转]Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- 【转】线程、Thread类和线程终止
- String的成员方法的使用
- sql server遍历表不用游标和临时表的方法
- JavaScript call()和apply()
- dd命令的巧妙使用
- 如何解析C语言的声明
- xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'
- 关于REST API设计的文章整理
- Unity shader 官网文档全方位学习(一)
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本
- 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'
- Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7
- 禁止表单操作及JS控制输入的方式
- MongoDB索引,性能分析
- Java多线程之Callable接口与Runnable的实现以及选择
- DBFlow(4.2)新版使用
- php array_merge和运算符+