该事情的由来是来自于一个面试题,题目是这样的,[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类型。

最新文章

  1. Django基础,Day10 - template 模板引擎与路径设置
  2. nginx反向代理、根据浏览器分离访问
  3. [转]Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
  4. 【转】线程、Thread类和线程终止
  5. String的成员方法的使用
  6. sql server遍历表不用游标和临时表的方法
  7. JavaScript call()和apply()
  8. dd命令的巧妙使用
  9. 如何解析C语言的声明
  10. xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'
  11. 关于REST API设计的文章整理
  12. Unity shader 官网文档全方位学习(一)
  13. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本
  14. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'
  15. Interpreting /proc/meminfo and free output for Red Hat Enterprise Linux 5, 6 and 7
  16. 禁止表单操作及JS控制输入的方式
  17. MongoDB索引,性能分析
  18. Java多线程之Callable接口与Runnable的实现以及选择
  19. DBFlow(4.2)新版使用
  20. php array_merge和运算符+

热门文章

  1. JS笔记 语法
  2. puppet单机模型
  3. Eclipse工具的简单使用
  4. java 用集合完成随机点名器和库存管理案例
  5. 用它5分钟以后,我放弃用了四年的 Flask
  6. 炼技术(9): 简约而不简单,永不停歇的测试 -- always_run
  7. Spring事务专题(五)聊聊Spring事务到底是如何实现的
  8. web基础(四)严格模式与混杂模式
  9. Git的使用方法及IDEA与Git的集成
  10. Ubuntu LNMP环境的搭建