百度日常一面
除项目外的提问:
介绍一下ES6+在项目中的一些使用:Promise Async Await Map对象,数组方法
介绍一下原型链:是JS提供的一套基于原型的继承机制,在继承的过程中如果在某个对象找不到其方法,会沿着原型链往上找方法,如果一直找到null都没有找到的话,就会报错说明not a function。每个对象都有其原型方法,比如Array Function Object等,在原型方法上的方法可以被所有对象所使用,原型链的尽头是null。
题目:
function A(){ Function.prototype.a = function(){ console.log("a"); } Object.prototype.b = function(){ console.log("b"); }}var a = new A();a.a();a.b();
new出来的是个对象,所以可以访问b方法不能访问a方法,会报错 a is not a function。
讲讲Promise:Promise是为了解决之前的回调地狱的情况出现的,使用.then .catch .finally等方法解决了回调地狱,变成一步一步的解决,但是其仍旧有自己的问题,当Promise中间连续调用.then .catch的方法的时候,可读性会下降,可维护性也会下降,比如今天一串的then方法中间某一步出问题了很难调试,所以有了Async Await
讲讲Async Await:Async Await实际上是promise的一个语法糖,并不是底层的重构,但是它允许我们像同步一样书写异步代码,这里就首先增强了可读性,第二增加了可调试性。
题目:
console.log(5); try{ new Promise((resolve,reject)=>{ console.log(1); reject("error"); }).catch((err)=>{ console.log(2); })} catch(e){ console.log(3);}console.log(6);
答案:5126
为什么没有3?因为在Promise中的错误不可以被trycatch捕获。
PromiseAll是串行还是并行?如果是并行如何保证结果数组和传入数组的顺序一致性?是并行的,在用for迭代传入数组的时候给它们一个idx在回调的时候根据这个idx把它们放回去。
实现一个容器左边是图片右边是名字和定价然后垂直对齐
.box{ display: flex; } .img{ width: 100px; background-color: red; } .text{ flex:1; flex-direction: column; justify-content: center; }
Css实现垂直居中:
绝对定位,flex,grid,边框计算,table