游泳健身了解一下:
github
和小伙伴一起搞的日常总结
循环你用过什么?
for
for in
map
forEach
那么你知道这的区别吗?
map 我们用来获取某些值,如 [{name:1,age:18}].map(item=>item.name) // 获取到了数据里面的名称的数组
forEach 是用来循环的
for 常用
你知道哪个可以进行操作打断吗,如果当前map里面没有name,那么return的值是啥?
哦!都可以打断吧
开始我的操作
// forEach || map
try{
[xx].forEach(item=>{
if(item.xx){
throw new Error('呀我错了')
}
})
}catch{
console.log('我被打断了')
}
// for
for(let i=0;i<3;i++){
if(i===1){
return
}
}
map 里没有值的时候那么出来的就是 [undefined,undefined,'张三']
知道怎么判断object 是个空吗
object.keys
for in
JSON.stringify // 当前值如果是一个 function就有问题了
用for in 有什么问题吗?
var obj1 = Object.create({
a:1,
b: 2
})
Object.prototype.name= '2'
for(let item in obj1){
console.log(item)
}
// for in 会把原型链上的值也带出来
// 通常我们使用 hasOwnProperty 判断当前值是否在当前的object 上配合使用
面试官:基础还可以,加大点难度
有使用过for of 吗?object支不支持for of?
object 不支持for of
for of 是一个迭代器的方式来进行的循环
可以手写一个object支持for of吗?
let object1 = {
name: '张三',
age: 18,
[Symbol.iterator]:function(){
let nextIndex = 0;
let _that = this
let arr = Object.keys(_that)
return {
next: function(){
return {
value: _that[arr[nextIndex++]],
done: nextIndex>arr.length
}
}
}
}
}
for(let item of object1){
console.log(item)
}
还有什么也支持for of 呢?
天生带有 Symbol.iterator迭代器的都支持for of
有 Array,Set,Map
Set,和Map 有用过吗?
Set 常用的就是去重 [...new Set([1,1,1,2,3,2])]
Map 就是键值对的对象
get set delete has clear size for of 等方法
weakSet和weakMap有什么特点吗?
weakSet和weakMap 都是弱引用,当前遍历不被引用的时候就会被垃圾回收机制回收,所以不能被for 循环,所以不担心内存泄露
weakSet 只能存对象
weakMap 的键值只能是对象
面试官:es6还行,问问异步把
解决异步有什么方法吗?
定时器
promise
async await
postmessage
ajax
手写一个promise把
// 其实本身是一个状态模式,修改当前状态,下面这个应该有 60分把(面试够用版本) 要达到100分得解决多个promise 嵌套
function myPromise(fn){
_this = this
this.state = 'pending'
this.successVal = ''
this.errorVal = ''
this.successFn = []
this.errorFn = []
let resloveFn = function(val){
if(_this.state === 'pending'){
_this.state = 'success'
_this.successVal = val
_this.successFn.forEach(fn=>fn(val))
}
}
let rejectFn = function(val){
if(_this.state === 'error'){
_this.state = 'error'
_this.errorVal = val
_this.errorFn.forEach(fn=>fn(val))
}
}
fn(resloveFn,rejectFn)
}
myPromise.prototype.then = function(reslove,reject){
// 处理异步
if(this.state === 'pending'){
this.successFn.push(reslove)
this.errorFn.push(reject)
}
// 处理同步
if(this.state === 'success'){
reslove(this.successVal)
}
// 处理同步
if(this.state === 'error'){
reslove(this.errorVal)
}
}
let pro = new myPromise((resolve,reject)=>{
// setTimeout(function () {
// resolve(1)
// },100)
resolve(1)
})
pro.then(res=>{
console.log(res)
})
什么?用过async和await。哦终极异步方案?,那么你可以手写一个吗?
async 和 await 其实是一个 promise 和 generator 函数的一个超集
function async fn(){
}
||
function fn(){
return spawn(function*(){
})
}
// 自动迭代器
function spawn(genFn){
return new Promise((reslove,reject)=>{
let gen = genFn()
function setp(fn)
let next
try{
next = nextFn()
}catch(e){
reject(e)
}
if(next.done){
reslove(next.value)
}
Promise.resolve().then(val)=>{
setp(function(){
return gen.next(val)
})
}
}
setp(function(){
return gen.next(undefined)
})
}
}
面试官:小伙子基础还行,深度不够。我回去好好了解一下
最后
求靠谱内推(北京地区)可以留言我、