看到一道面试题,[“1”, “2”, “3”].map(parseInt) 答案是多少?

心生好奇,做做看,发现卡住,没什么头绪。首先对parseInt不了解,只好百度,看了MDN的解释一度以为parseInt(string, radix)是在[radix]进制下,string转换成数字是多少。于是简单地进行一个测试,parseInt(3,2),应该很简单吧,然鹅返回了个NaN,what?百度知道给了我答案,parseInt(string, radix)表示[radix]进制下写成的string,转换成一个10进制数是多少。此处2进制下不可能写成3,因而返回NaN。

重看一下网上对于这道面试题的解答,看到这么一句,“因为字符串的值不能大于基数,二进制里不能有3,返回 NaN ”。看了半天MDN上parseInt的解释,也没发现有这条规则啊。乍一看,套用在parseInt(3,2)没问题,但试试parseInt(57, 23)呢,完全可以大于基数啊。

思考来了,因为人类的数字单个拎出来就0-10这11个数字。10进制以下,比如2到9进制,是装不下这全部的11个数字,所以无法随心所欲的写出所有想写的数字(比如2进制写不了2,9进制写不了9)。到了10这个分界线,那就不同了,10进制就涵盖了所有这11个数字,各种组合随便写,比如4954610287。回到parseInt上来,得出结论,radix参数在9以下(包含9),“string的值不能大于radix的值”这句话才是对的,radix>=10后,那就天高任鸟飞,string取多少都没问题。

其实在刚看到这道面试题的时候,还有个疑问,同样是语法不熟导致的啊,羞愧。就是map怎么会传3个参数到parseInt这个方法里面去的呢。看了MDN才了解到,“callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身。” parseInt作为map的callback,被自动传入了三个参数,第三个被省略,数组的索引成了parseInt的radix基数。

看到这里,想必这道面试题答案也就迎刃而解了。不能小看了任何一个问题,一道简单的面试,涵盖了那么多知识点值得深挖呀。

由”二进制里不能有3“引发的对parseInt的思考的更多相关文章

  1. 由异常:Repeated column in mapping for entity/should be mapped with insert="false" update="false 引发对jpa关联的思考

    由异常:Repeated column in mapping for entity/should be mapped with insert="false" update=&quo ...

  2. Topk引发的一些简单的思考

    软件工程课程的一个题目:写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来.文本文件大约是30KB~300KB大小. 首先说一下这边的具体的实现都是在linux上实现的. ...

  3. 由Vue引发的getter和setter思考

    公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vu ...

  4. 特殊汉字“𣸭”引发的对于字符集的思考;mysql字符集;sqlalchemy字符集设置;客户端字符集设置;

    字符集.字符序的概念与联系 在数据的存储上,MySQL提供了不同的字符集支持.而在数据的对比操作上,则提供了不同的字符序支持. MySQL提供了不同级别的设置,包括server级.database级. ...

  5. 由Menu小项目所引发的对软件工程的思考

    学习了孟老师的这几节课程,我学习了如何搭建一个简单的命令行menu小程序,从最简单的程序开始,一步步的根据软件工程的一般规律,进行逐步开发.完善,最终实现了一个比较通用的menu程序,可以让别的开发者 ...

  6. try catch引发的性能优化深度思考

    关键代码拆解成如下图所示(无关部分已省略): 起初我认为可能是这个 getRowDataItemNumberFormat 函数里面某些方法执行太慢,从 formatData.replace 到 une ...

  7. BFC引发的关于position的思考

    BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin决定.属于同一个BFC的两个相邻Box的margin会发生重叠 每个元素的margin box的左边, ...

  8. setTimeout(fn, 0)引发的JavaScipt线程的思考

    起因 周五改一个checkbox的display属性被错误地设置为none的bug. 经debug发现, 有两个地方修改了display属性: 1) checkbox的controller; 2) c ...

  9. 一个神秘现象引发对beego框架的思考

    小强最近在项目中遇到了一个很奇怪的问题:在整改日志规范时,为了避免影响现有的代码结构以及改动尽可能小的前提下,在调用记日志的SDK处将某一个字段值首字母改为大写,代码示例如下: fmt.Println ...

随机推荐

  1. Spring:Spring-IOC三种注入方式、注入不同数据类型

    一.Spring IOC(依赖注入的三种方式): 1.Setter方法注入 package com.jpeony.spring.setter; import com.jpeony.spring.com ...

  2. Linux date 获取时间

    获取当前日期: ubuser@ubuser-OptiPlex-7010:~$ date +%Y_%m_%d2020_12_16 获取当前时间: ubuser@ubuser-OptiPlex-7010: ...

  3. XCTF IgniteMe

    一.查壳 结论: 1.用vc++编译的. 2.无壳,毕竟是一分的题 二.点击运行,发现不是爆破,而是找出注册机,汇编功力还在提升中,只能拖入ida来静态调试了 具体的见注释: 二.1点击进入关键函数 ...

  4. Jmeter之cokie管理器和http默认值

    根据上文中,都配置好以后就可以开始启动了,点击启动,线程组里面就会开始记录你的网页请求.这里使用CNode网站做测试.我分别记录进行了"登入","话题创建",& ...

  5. Docker从容器拷贝文件到宿主机或从宿主机拷贝文件到容器

    1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...

  6. 重学 Spring Boot

    什么是Spring Boot Spring Boot 是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度和简化 Spring ...

  7. python 09篇 操作Excel

    一.往Excel中写数据 使用pip install xlwt安装xlwt模块,用xlwt模块进行对Excel进行写数据. import xlwt # book = xlwt.Workbook() # ...

  8. Java基础00-基础语法3

    1. 注释 1.1 注释概述 1.2 注释分类 1.3 示例 2. 关键字 2.1 关键字概述 2.2 关键字的特点 3. 常量 3.1 常量的概述 3.2 常量分类 以上常量除了空常量都是可以直接输 ...

  9. [刘阳Java]_SpringMVC与Struts2的对比_第12讲

    今日来具体给讲讲SpringMVC与Struts2的对比,这样方便朋友们在工作中或者是面试学习中对这两者的区别有个更好的了解 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的 ...

  10. deepin修改数据源升级到deepin15.11桌面版

    参考:https://blog.csdn.net/baidu_41751590/article/details/89064220 1,我修改数据源地址: 换成上海交通大学源地址: http://ftp ...