- 先注明一下题目来源,剑哥的前端面试每日3+1 大家如果有兴趣可以去github上答题
1 用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值
<script> let arr = [] function addItem() { let item = Math.floor(Math.random()*32 + 2) if(arr.indexOf(item) == -1) { arr.push(item) } if(arr.length < 5) { addItem() } } addItem() </script>
2 写一个方法,去掉字符串中的空格
<script> // type 0(全部空格),1(开头空格),2(结尾空格),3(开头结尾空格), 默认为0 function trim(str,type) { switch(type) { case 1: return str.replace(/^s*/g,'') break case 2: return str.replace(/s*$/g,'') break case 3: return str.replace(/^s*|s*$/g,'') break default: return str.replace(/s*/g,'') break } } let str = ' ago ogj ' let newstr = trim(str) //'agoogj' let newstr0 = trim(str,0) //'agoogj' let newstr1 = trim(str,1) //'ago ogj ' let newstr2 = trim(str,2) //' ago ogj' let newstr3 = trim(str,3) //'ago ogj' </script>
3 去除字符串中最后一个指定字符
str.lastIndexOf(code)-----获取字符所在的索引
srt.substring(index1,index2)-----截取字符串
<script> // 去除字符串中最后一个字符 function trimCode(str,code) { if(str.length === 0) return let index = str.lastIndexOf(code) let newStr = str.substring(0,index) + str.substring(index+1,str.length) return newStr } </script>
4 写一个方法把下划线命名转成大驼峰命名
<script> //写一个方法把下划线命名转成大驼峰命名 function toCamel(str) { //使用split件str拆分成数组 if(str.split('_').length === 1) return //使用reduce累加器对数据进行累加,并将索引大于0的元素首字母大写 //substr(index,index) 截取字符串中指定索引的字符集 let newStr = str.split('_').reduce((a,b)=>{ return a+b.substr(0,1).toUpperCase() + b.substr(1) }) return newStr } console.log(toCamel('hello_world')) </script>
5 写一个方法切换字符串的英文大小写
<script> //写一个方法切换字符串的大小写 function toggle(str) { return str.replace(/([a-z]*)([A-Z]*)/g, (m, s1, s2)=>{ return `${s1.toUpperCase()}${s2.toLowerCase()}` }) } console.log(toggle('asgSDGWE54adDS')) </script>
6 使用原生js实现以下元素操作
<div id="tag">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
1)2移动到4后面; 2)删除2; 3)在3,4之间添加一个3.5
<script>
let tag = document.getElementById('tag')
let div1 = document.querySelector('#tag>div:nth-child(1)')
function fun1() {
let div2 = document.querySelector('#tag>div:nth-child(2)')
let div5 = document.querySelector('#tag>div:nth-child(5)')
tag.removeChild(div2)
tag.insertBefore(div2,div5)
}
function fun2() {
let div2 = document.querySelector('#tag>div:nth-child(2)')
tag.removeChild(div2)
}
function fun3() {
let div4 = document.querySelector('#tag>div:nth-child(4)')
let newDiv = document.createElement('div')
newDiv.innerHTML = 3.5
tag.insertBefore(newDiv,div4)
}
</script>
7 查找一个字符串中出现最多的字符,并统计个数
<script> let str = 'aghaosbasldskdpqashdaognkdalqjgoddjddjdjdjdjjdjajapaaagaggk' let obj = {} for(let i=0;i<str.length;i++) { if(!obj[str.charAt(i)]) { obj[str.charAt(i)] = 1 } else { obj[str.charAt(i)]++ } } let max = 0 let maxcode = '' for(var key in obj) { if(obj[key] > max) { max = obj[key] maxcode = key } } console.log(maxcode,max) //a 12 </script>
8 null与undefined的异同
a 相似点
给一个变量赋值null,undefined,这两种写法几乎等价
两者在if条件判断语句中,都会自动装换为fasle
null == undefined 得到的结果是true
b 不同点
null === undefined 得到的结果是false
null表示没有对象,即该处不应该有值
undefined表示缺少值,就是此处应该有值,但是还没有定义
9 写一个去除制表符和换行符的方法
function deleteTabs(str = '') { return str.replace(/s+/g,'') }
function codeNums(code,str) {
let regexp = new RegExp(code,'g')
return str.match(regexp).length
}
字符串加密的方法很多,有md5(无解密),base64,aes,凯撒加密等,这里实现一下凯撒加密解密,MD5和base64百度很多博客,就不写了
function baseCode(str='',type,space=3) { // type=1 加密,type=2解密 if(type === 1) { return str. split("") .map((s) => { return String.fromCharCode(s.charCodeAt() + space) }) .join("") }else if(type === 2) { return str. split("") .map((s) => { return String.fromCharCode(s.charCodeAt() - space) }) .join("") } } console.log(baseCode('hello world',1,2)); //jgnnq"yqtnf console.log(baseCode('jgnnq"yqtnf',2,2)); //hello world
12 写一个判断数据类型的方法
Object.prototype.toString.call()
回调函数就是指函数在初始定义的时候先不执行,等满足一定条件以后再拿出来执行。如下:
setTimeout(() => { console.log('在本轮任务最后执行!') }, 0);
14 JavaScript有哪些内置对象
- Date
- Array
- Object
- Math
- RegExp
- Function
- Set
- Map等
15