1.什么是变量提升
就是用var关键字声明的变量,声明过程会被提升到作用域的顶部,但是赋值不会。函数声明也会产生提升
function fn() {}
函数提升不会被重复的变量声明覆盖,但是会被同名变量赋值覆盖。
2.如何将异步变为同步
async await promise.then 回调函数
3.promise 常用api
reslove
改变promise的状态为成功状态。
reject
改变promise的状态为失败状态。
all
接收一个promise数组,并行执行数组内的每一个promise,知道相应最慢的promise也执行完毕之后,再将执行结果按转入的数组的顺序返回出来。因为是并行执行,所以没办法修改执行顺序。如果想要修改顺序,那就一起放在.then回调里等一个响应完再调下一个,并行和顺序二者不可兼得
race
接收一个promise数组,并行执行,只要有一个promise状态改变,那就会终止其他的promise,并且将第一个改变状态的promise的返回值返回出来
allSettled
接收一个promise数组,并行执行,和all相反,这个api不会因为某个promise失败而整体失败,他会等所有promise执行完,不管执行结果是成功还是失败,最终allSettled都会变为fulfilled状态,并且将所有的执行结果返回出来。这个api就解决了all一个失败全都失败的弊端。
4.js怎么判断数据类型
1.typeof 可以判断基本数据类型和引用数据类型,但是无法判断引用类型具体是数组还是对象 比如null array fun obj 都会返回object。
2.instanceof 判断当前变量是否是某个对象的实例
3.isArray 判断当前变量是否为数组
4.Object.prototype.toString 这是对象的原型方法,他可以返回当前值得所属类详细信息,固定结构:’[object 所属的类]' 这个方法是目前来说最准确的。在使用的过程中需要改变一下this的指向,一般用法Object.prototype.toString.call(变量名)
5.|| 和&& 的返回值
&&如果两个值都为真则返回第二个为真的值
&&如果结果为假则返回第一个为假的值
||如果结果为真则返回第一个为真的值
||如果结果为假则返回第二个为假的值
6.使用canvas的measureText方法计算文本占据的宽度从而实现小说阅读器的分页。
7.防止浏览器缓存的办法
1.更新之后的文件带上版本号
2.请求头设置nocache也就是设置不缓存
8.vue父子组件通信,如果传递的东西过多,可以用listeners
9.v-model和sync的区别:
1.本质上都是语法糖,但是v-model只能在一个标签上用一次,而sync可以用多次。
10.css hack
就是一种用于处理浏览器兼容性的符号之类的东西,有些符号只有某些浏览器能识别,以这种方式达到欺骗浏览器的效果。使浏览器只能识别出一些自己能识别的样式,从而达到兼容各个浏览器的目的。
11.h5的特点以及新特性
特点:跨平台,适配多个终端,以及新加入了一些元素能达到让用户在移动设备上也能有电脑上的体验。
新特性:语义化标签,新增canvas,本地存储,websocket,拖放 darg,地理定位等一些新功能
12.css3的新特性
动画,过渡,边框,圆角,属性选择器,伪类选择器
13.小程序能否获取手机的唯一标识
不能,小程序是面向用户的,应该不会提供这种获取硬件唯一标识的api,可以通过用户的openid和手机号拼接来模拟唯一标识
14.主流浏览器的兼容性问题
盒模型的问题,盒模型分为ie盒模型,和w3c盒模型。ie盒模型的width包括content,padding,border 而w3c的盒模型只包括content。可以通过box-sizing属性设置content-box为w3c盒模型 border-box 为ie盒模型。
其他的就是一些兼容性的问题。以及jsapi的浏览器支持度。出现兼容性问题的主要原因还是因为浏览器的渲染引擎不同导致的。
15.vue项目首屏加载速度优化
1.将静态资源通过cdn引入的方式,以及一些外部用到的库,再import的时候,都是会一起打包进去的,所以这些库可以以cdn的形式引入。具体操作如下
1.2 image.png
这个配置的意义是当我们想应用外部的库,但是又不想webpack将他打包进去,就可以在这里配置,这样配置之后他就会去查找全局的变量名,
1.3 删除掉原有的import。将用到库的地方变量名改成和webpack中配置的这个名字。
(cdn:当用户通过cdn请求资源的时候,cdn会利用最靠近用户的服务器来返回资源)
图片懒加载,模块按需加载,路由懒加载。都是优化首屏加载速度的方案。
网友评论