携程前端面经
五道题目
1.比较经典的,类似于
for(let i=0;i<10;i++){ setTimeout(function(){ console.log(i) },1000) }如何输出0 1 2 3...答的let,闭包,第三个参数
问为什么let可以输出这个,答的作用域,面试官让详细解释,我不知道是要怎么样详细解释
2.引用类型考察
let a={m:10,n:30} let b=a; let c=b; b.m=20; let d={...b} c={n:40} console.log(a.m) //20 console.log(a===b) //true console.log(a===c) //false console.log(b===d) //false(...运算符第一层深拷贝,如果某项还是引用类型会互相影响) console.log(b===c) //false3. 千分位补充逗号,且保留两位小数
let str='1234567' function convertMoney(str){ let strarr=str.split('.'); let first=strarr[0]; let second=strarr[1] || '00'; let idx=0; let res=[] for(let i=first.length-1;i>=0;i--){ idx++; res.unshift(first[i]) if(idx %3==0){ res.unshift(',') } console.log(res) } let results=res.join('')+'.'+ second; return results } console.log(convertMoney(str))也可以用正则,网上的答案
let str='1234567' function convertMoney(str){ let reg=/\d{1,3}(?=(\d{3})+$)/g; let newarr=str.replace(reg,'$&,') return newarr } console.log(convertMoney(str))4.按照index排序
采纳评论区大佬答案。。
let arr=[ {value:'北京',index:'beijing'}, {value:'上海',index:'shanghai'}, {value:'北海道',index:'beihaidao'}, {value:'日本',index:'ribeng'} ] let newarr=arr.sort(function(a,b){ if(a.index > b.index) { return 1 } else if(a.index < b.index) { return -1 } else { return 0 } })
平时做正则容易出错,比较怂还是用charCodeAt()了
let str='ahbc345lkiol876kkk67'; let res=[]; let temp=[]; for(let i=0;i<str.length;i++){ if(str[i].charCodeAt()>='0'.charCodeAt() && str[i].charCodeAt()<='9'.charCodeAt() ){ temp.push(str[i]) }else{ res.push(temp) temp=[] } } res.push(temp) console.log(res.filter(item=>item!=0))可以用正则
let str='ahbc345lkiol876kkk67'; let reg=/\d+/g let newreg=str.match(reg) console.log(newreg)
不太会搞这些,有错的或者有更好的方法欢迎大家指出来我学习一下
****************************
更新
二面,最近面试太忙可能和其它面试记混了,尽量还原
1.手写防抖节流
2.为什么不用es6写,es6转换原理
3.redux的流程
4.为什么redux数据管理框架可以和react这种UI框架结合起来(提示与provider和contexts有关)
5.手写一个简单的闭包
6.闭包概念,使用到闭包的例子说明
7.有没有看过源码
8.react-thunk
9.有没有用过ts
10.简单介绍一下webpack
11.简单说明loaders和plugin的不同
12.https传输的内容需不需要另外加密
没啥后续了,应该是挂了
迷惑,8月27一面,今儿都10月12了,来个三面链接?!!!!!!!