JavaScript面试题(持续更新)
- 先注明一下题目来源,剑哥的前端面试每日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

浙公网安备 33010602011771号