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