一些面试题的汇总。看到就记录下来。不用到就会忘系列~ [parseInt]

1 parseInt 用法

parseInt(string,radix)方法是将输入字符串转化为数值,两个输入参数中string为要转化的字符串,

radix(基数)可省略,是浏览器以几进制来解读输入的string。可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。

如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

parseInt("123"); //123

parseInt("123ab123"); //输出123  因为出现字母所以该字母及之后的字符都不被解析

若输入字符串首位是0或者0x之外的数字,则在radix缺省的情况下,默认解读为10进制。

 

0X默认解读为16进制

parseInt("0x10"); //字符串以0x开头则将之后的数字按16进制解读,16进制的10也就是十进制的16, 因此输出为16

parseInt("0xa"); //10,要注意16进制包括0~9,a~f (也就是10~15),超出该范围的字符不被解读。

parseInt("0xg"); //NAN

这三个例子分别等价于 parseInt("0x10",16)  parseInt("0xa",16)  parseInt("0xg",16)

 

以0开头的默认解读为八进制,但是不同浏览器解读方式不同,

parseInt("011"); //chrome下输出为11也就是会忽略首位的0,将011当成10进制解读,别的浏览器未测试--

parseInt("011",8); //此时会输出正确的9

因为这个坑,所以建议需要以八进制解读时,带上第二参数radix并设置为8,以免出问题

parseInt("09",8); //八进制取值范围为0~7,不包括9,因此9不能被解读,这时相当于parseInt("0",8);输出0

parseInlt(36, 4) // 四进制取值是0-3,不包括6,所以不解读6所以是 3

parseInlt(46, 4) // 四进制取值是0-3,不包括4,6,所以不解读6所以是 ,是NAN 

parseInt("010"); //未定:返回 10 或 8

['1', '2', '3'].map(parseInt) ==》 parseInt(1,0)  parseInt(2,1)  parseInt(3,2) [1, NAN, NAN]

 

2  写一个函数 传两个参数 m,n 返回一个数组长度为 m,值全部为n, 要求不能用循环写!

思考: 不能用循环,如何去增加数据的长度并且复制呢。。
 1 function b(m,n,a=[]){
 2      let arr = a;
 3      arr[arr.length]=n;
 4      if(a.length<m){
 5         b(m,n,arr)
 6      }else {
 7        arr = a
 8      }
 9      return arr
10 }

可能就是要考你的递归吧。。(有更好的方法的欢迎评论~)

 

3  数组去重。。 定义对象的方法去遍历应该是最好的,不懂的去百度一下,这里特意提一下一个方法就是 array.from(new Set()))  

    面试官可能会问你,如果数组存储的是对象呢,而且你只能用一次遍历的方法怎么解决呢。。我就遇到过这个问题,其实方法就是把对象转为string再去一次性遍历。

 有更好的方法的欢迎评论~

 

4  未完待续~

 

5    参考地址:https://juejin.im/post/5d23e750f265da1b855c7bbe

 

6    fork推荐: https://github.com/mqyqingfeng/Blog

 

7   又发现一个优秀的git https://github.com/Advanced-Frontend/Daily-Interview-Question

 

 

 

 

posted @ 2019-07-09 10:07  饭饭大人  阅读(177)  评论(0编辑  收藏  举报