2022秋招-前端学习记录4-牛客前端题1

牛客网 前端技能测评挑战 错题集1

8道题,涉及知识点:
1、parseInt()方法二进制转十进制
2、正则表达式(浅)、
3、number的toString()方法十进制转二进制

① FED49 二进制转换
描述:给定二进制字符串,将其换算成对应的十进制数字
输入:‘11000000’
输出:192

可以直接使用parseInt()函数,因为对parseInt(‘xxxxx’, 10)函数不熟悉,所以想不起来,以下恶补parseInt()的知识点与注意事项。
parseInt()函数的作用:
MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数
parseInt(‘xxxxx’, n) 函数的返回值是一个十进制的number类型数字,
n取决于字符串’xxxxx’是什么进制的,如果是二进制,那么n取值为2,结果输出的就是二进制转换成十进制的数字,比如

console.log(parseInt('11', 2)); // 3
console.log(parseInt('11', 16)); // 17
console.log(parseInt('11', 8)); // 9
console.log(parseInt('    12', 10)) ; // 12

题解:
在这里插入图片描述
运行成功!
关于parseInt(‘xxxxx’, n) 坑点,还有以下补充:
的确parseInt(‘xxxxx’, n)很好用,不写n,在部分时候默认’xxxxx’里是个十进制的数,所以n每次最好都写上。
parseInt(‘xxxxx’, n)很适合于纯数字字符串转换,但是,不纯的字符串也会输出数字,比如:

console.log(parseInt('11aaa', 8)); // 9
console.log(parseInt('11aaa', 10)); // 11
console.log(parseInt('11.12', 10)); // 11
console.log(parseInt('Fyyyy', 16)); // 15

如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。

//注意:021是因为0开头,js默认这是8进制的数,所以转换字符串的时候会变成'17',而十进制的‘17’转换为十进制的17, 8进制的‘17’被转换为十进制的15。
console.log(parseInt(021, 10)) // 17
console.log(parseInt(021, 8)) // 15

什么时候parseInt()返回值是NaN呢?
当parseInt(string, radix); 中的 radix 小于 2(除了0) 或大于 36 ,输出NaN,
以及第一个非空格字符不能被转为数字
以及不能超过进制的数,比如 ‘3444’不能被认为是2进制

parseInt('11',0) // 11  这里0被默认为十进制了,有的浏览器是默认8进制
parseInt('11',1) // NaN
parseInt('11',-2)  // NaN
parseInt('11',36) // 37
parseInt('11',37) // NaN
parseInt('a11',10) // NaN
parseInt('5hello',10) // 5
parseInt('hello5',10) // NaN
parseInt('3444',2) // NaN

负数也可以转:

parseInt('-3444',10) // -3444
// 以下均返回 -15
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);

mdn的特殊案例:

parseInt(0.000000434, 10)  // 4,注意这里小数点后6个0
parseInt('0.000000434', 10) // 0 ,注意这里是字符串
parseInt(0.00000434, 10) // 0,注意这里小数点后5个0
parseInt(4.7, 10); // 4
parseInt(4.77777, 10); // 4
parseInt(4.7 * 1e22, 10); // 4

② FED32 正确的使用 parseInt
在这里插入图片描述
在这里插入图片描述

 
 
③ FED55 判断是否包含数字
描述
给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false
输入:‘abc123’
输出:true

正则表达式yyds!!!
检查一个字符串里是否包含数字的正则:

// 正则使用 / /包起规则,比如下面的 \d,是代表匹配一个数字
// 正则表达式后的"g"是一个表示全局搜索选项或标记,将在整个字符串查找并返回所有匹配结果
let re = /\d/g  
let str = '1234aaabc3fd342'
// 正则使用 test()检查这个字符串是否有规则匹配里面的字符,如果有则输出true,没有则输出false。
re.test(str) 

在这里插入图片描述
④ FED57 判断是否以元音字母结尾
在这里插入图片描述
正则表达式yyds!!!

检查一个字符串末尾是有啥啥啥的正则:

// 匹配一个字符串末尾是不是 'a'
let re = /a$/

检查一个字符串末尾是有什么别的什么的正则,关键在于或,使用字符集 [xxxx]即可,如果是所有小写的字母,可以使用[a-z]这种范围类的:

let re = /[abc]$/

不分字母大小写检查字符串末尾是否有元音字母的正则,在正则末尾缀上 i :

let re = /[aeiou]$/i

在这里插入图片描述
⑤ FED58 获取指定字符串
在这里插入图片描述
正则表达式yyds!!!
检查一个字符串里有没有连续n次xxx的正则:

let re = /a{2}/ 
// 不匹配“candy”中的“a”,但它匹配“caandy”中的所有“a”,以及“caaandy”中的前两个“a”

检查一个字符串里有没有连续3次数字的正则:

let re = /[0-9]{3}/ 
// 或者
re = /\d{3}/

将匹配到的字符串输出:
str.match(re)方法,如果匹配到了,就返回对应数组arr,arr[0]里面存匹配到的那个字符串。
str.match(re)方法返回的是个数组,而且test方法是正则的方法,不一样!match方法是str上面的,所以是str调用match方法,match()里面直接传正则表达式,正则不用加引号什么的!

let str = 'abc2333ssa'
// 下面的方法返回的是个数组,而且test方法是正则的方法,不一样!match方法是str上面的,所以是str调用match方法
str.match(/\d{3}/) // ["233", index: 3, input: "abc2333ssa", groups: undefined] 没有g的话,只返回了第一组匹配到的
str.match(/\d{3}/g) // ["233"] 有后缀g的话,就单纯返回个数组了
"http://www.nowcoder.com?key=1&key=2&key=3#hehe".match(/(\w+)=(\w+)/g) //  ["key=1", "key=2", "key=3"]

如果没有匹配到,则返回null,比如:

str2 = 'abc2ssa'
str2.match(/\d{3}/) // null

题解:
在这里插入图片描述
⑥ FED59 判断是否符合指定格式
在这里插入图片描述
正则表达式yyds!!!
检查一个字符串前三个字符是不是都是数字:

let re = /^[0-9]{3}/

检查一个字符串前3和末4 字符是不是都是数字:(检查完前3字符后不可再次复用给末4检查。)

let re = /^[0-9]{3}[0-9]{4}$/
re.test('1234321') // true
re.test('1234') // false 注意这里是一串,必须有7个字符以上如果两个规则之间是或,就可以是true了
比如 re = /^[0-9]{3}|[0-9]{4}$/
re.test('1234') // true

题解:

let re = /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/

在这里插入图片描述
⑦ FED48 二进制转换
在这里插入图片描述
上面的parseInt(str, radix)可以将二进制数转换成十进制。
哪种方法可以将十进制转换为二进制呢?
Number.prototype.toString()介绍:
MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toString
语法:
numObj.toString([radix]);
radix:指定要用于十进制数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。
如果 toString() 的 radix 参数不在 2 到 36 之间,将会抛出一个 RangeError。
注意返回值是个字符串!字符串!

let num = 16;
num.toString(2) // "10000"
num.toString(10) // "16"
num.toString(8) // "20"
num.toString(16) // "10"
num = 1.2333
num.toString(16) // "1.3bb98c7e28241"
(-0xff).toString(2) // "-11111111"
(-10).toString(2) // "-1010"

题解:注意bit位是反的,是从字符/数字串的尾部开始数的。
在这里插入图片描述
⑧ FED50 二进制转换
在这里插入图片描述
题解:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值