看到一道面试题,[“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. linux学习之路第八天(linux文件权限详解)

    建议和我上一篇博客一起通读,效果更加 1.权限的基本介绍 通过一张图片解决疑惑(重点) rwx权限详解 rwx作用到文件 1)[r]代表可读(read) :可以读取,查看 2)[w]代表可写(writ ...

  2. WPF教程十二:了解自定义控件的基础和自定义无外观控件

    这一篇本来想先写风格主题,主题切换.自定义配套的样式.但是最近加班.搬家.新租的房子打扫卫生,我家宝宝6月中旬要出生协调各种的事情,导致了最近精神状态不是很好,又没有看到我比较喜欢的主题风格去模仿的, ...

  3. s3cmd的使用

    目录 1. 安装s3cmd 2. 配置s3cmd 3. 使用s3cmd [前言] s3cmd 是用于创建S3桶,上传,检索和管理数据到对象存储命令行实用程序. 本文将指导linux下安装s3cmd程序 ...

  4. CTF-wtc_rsa_bbq-writeup

    wtc_rsa_bbq 题目信息: 附件: cry200 解题思路: 1.观察cry200文件,发现该文件是一个二进制文件,用二进制模式查看,发现开头为50 4B 03 04,判断该文件是一个zip文 ...

  5. C语言:变量

    变量: 1.在程序运行过程中,值可以改变的量称为变量 2.每个变量都有一个名字,称为变量名 3.每个变量都必须进行变量说明,指明变量的类型 4.每个变量都有一个对应的地址,写法:&变量名 5. ...

  6. MySQL中的redo log和undo log

    MySQL中的redo log和undo log MySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎 ...

  7. Selenium3自动化测试【20】CSS定位元素

    CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...

  8. 线程Thread中的方法详解(二)

    1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...

  9. SAML 2.0 实例分析 sp向idp发送请求(3)

    user没有登陆过sp,此时sp向idp发送请求,下文是请求的xml形式 <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAM ...

  10. Nodejs 处理异步(获取异步数据并处理)的方法

    方法1. 回调函数方式 将异步方法如readFile封装到一个自定义函数中,通过将异步方法得到的结果传给自定义方法的回调函数参数.具体如下(以fs模块的readFile方法为例): //封装 var ...