1. H5新特性
- 语义化标签
- Canvas图形容器
- Video和audio标签
- 数据存储--
- Localstorage,SessionStorage 本地存储
- 新的表单控件与属性
- 控件 calendar、date、time、email、url、search
- 属性autocomplete、autofocus、form、list、placeholder
2. Localstorage、session和Cookie的区别?(需要背诵,倒是没问到)
- localstorage 和sessionStorage 本地存储,localstorage 浏览器关闭之后不会销毁 必须手动销毁,sessionStorage 浏览器关闭之后就销毁,存储大小5M,用于浏览器缓存,不与服务器通信;
- cookie一般由服务器生成,可设置失效时间,如果浏览器生成,默认关闭后失效。一般数据存储大小为4kb,每次都携带在 http头中,保存过多数据会带来性能问题。
3. 深拷贝和浅拷贝原理,分别如何去实现?
- 浅拷贝---浅拷贝是指复制对象的时候,只对第一层键值对进行独立的复制,如果对象内还有对象,则只能复制嵌套对象的地址
- 深拷贝---深拷贝是指复制对象的时候完全的拷贝一份对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。其实只要递归下去,把那些属性的值仍然是对象的再次进入对象内部一 一进行复制即可;
- 浅拷贝: 解构语法,例如...arg
- 深拷贝: JSON.parse(JSON.stringify())
4. 盒子模型
Css中将每个元素都设置成了一个矩形的盒子,页面的布局也就成了不同的盒子摆放到相应的位置,每个盒子都有内容区(content)、内边距(padding)、边框(border)、外边距(margin)组成,而IE的盒子模型区别于W3C盒子模型,它的content包含了padding和border。此外box-sizing可以设置盒子尺寸的计算方式,可选值有content-box--宽度高度用来设置内容区的大小,border-box--宽度高度用来设置整个盒子可见框的大小。
5. 选择器的权重
内联样式 > id选择器 > 类和伪类选择器 > 元素选择器 > 通配选择器
6.盒子水平垂直居中
Position:absolute 需要知道子盒子具体宽高
- 大盒子relative;小盒子absolute,top-left 50%,margin-top/left-小盒宽度一半
Margin:auto 宽高得有
- 同上,top、right、left、bottom:0,margin:auto;
Display:flex
- Display:flex; justify-content:center; align-items:center;
7. Css3新特性(这个要背一些)
- Box-shadow
- Box-radius
- css3选择器 last-child、nth-child
- 渐变
- 弹性盒flex
- 过渡、动画、变形
8. 数组(对象、字符串)的方法(必须背)
- Push,向数组末尾一个或多个元素,并返回数组新的长度;
- Pop,删除数组最后一个元素,被删除的元素作为返回值返回;
- Unshift,向数组开头添加一个或多个元素,并返回数组新的长度;
- Shift,删除数组第一个元素,被删除的元素作为返回值返回;
- splice,删除数组中一个或连续的元素,而且可以再删除位置添加新的元素,删除的元素作为返回值返回;
- concat,合并多个数组,并返回一个新数组;
- indexOf,返回置顶元素在数组中第一次出现的位置;
- forEach,接受一个函数作为参数,遍历数组时,所有数组成员依次执行该函数,中途不可停止。
9. 数组的去重
- 双层循环
- IndexOf和includes
- 排序去重
- Filter方法
- Key/value
- Es6的set和map
10. 重排和重绘
- 重排是指部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算;
- 重绘是由于节点的几何属性发生改变或者由于样式发生改变,例如改变元素背景色时,屏幕上的部分内容需要更新。
11. 防抖和节流
- 防抖函数控制函数在一定时间内的执行次数。防抖意味着 N 秒内函数只会被执行一次(最后一次),如果 N 秒内再次被触发,则重新计算延迟时间;
- 节流函数规定一个单位时间,在这个单位时间内最多只能触发一次函数执行,如果这个单位时间内多次触发函数,只能有一次生效。
- 应用场景:
- 防抖:输入框连续输入字符
- 节流:鼠标不断触发事件,如点击,用节流
12. 原型和原型链
每个函数偶有一个prototype属性,这个属性会指向一个对象,就是调用该构造函数而创建的实例的原型,可以通过实例对象的_proto_访问这个原型;实例在创建时,就会默认关联原型,并从原型继承属性;每个原型对象都会存在constructor属性指向关联的构造函数;如果访问一个实例对象的属性无果,js引擎会去原型对象中寻找,原型的原型中找,一直到Object。
13. 跨域问题(必须背好吧)
-
跨域是由同源策略引起的,同域名,端口,协议,三个都相同才认为是同源;
-
常见的跨域方式有
- Jsonp方式,很老的跨域方法,一般只处理get请求的跨域,script标签的src去访问到源的数据;
- Cors跨域资源共享,支持所有主流浏览器;当用XMLHttpRequest发送请求时,不同源的情况下,会在请求头headers加入{ origin },后台配置,Access-control-allow-origin:*
-
h5,window.postMessage跨域,有两个参数,”字符串”,” * ”;
-
Vue中跨域,代理proxy,本质上也是cors跨域
- 需要在vue.config.js里配置:
- Proxy:{ target ,changeOrigin , pathRewrite }跨域目标,是否允许跨域,模拟路径
- Proxy代理在项目上线后无法实现跨域,需要后端设置nignx代理
14. Js判断数据类型的方法有哪些?
- Typeof运算符
- Instanceof
- Object.prototype.toString.call(xxx)方法
15. This的指向
- This总是指向函数的直接调用者;
- 如果有new关键字,指向new出来的那个对象
- 在事件中,this指向触发这个事件的对象,ie的attachevent中的this指向window
16. 闭包
(1) 当一个嵌套的内部函数引用了外部函数的变量就产生了闭包,闭包是被嵌套的内部函数;
(2) 作用:使函数内部的变量在执行完后仍存储在内存中,函数外部也可以操纵函数内部的变量;
(3) 缺点:用多了会导致内存泄漏,触发不了垃圾回收装置,需要手动赋值null
(4) 应用场景:
① 使用return返回函数
② 函数作为参数
③ 所有的回调函数
17. 块级作用域
- 在ES5中,有全局作用域和函数作用域,以var定义的变量没有块级作用域的概念,可以跨块访问,不能跨函数访问;
- 在ES6中,块级作用域指的是在大括号或者if、else、for、while等语句中,以let定义的变量或const定义的常量只能在块级作用域里访问且不存在变量提升和重复声明,此外const定义的常量必须初始化赋值且不能修改。
18. Var、let、const区别?(const定义对象和数组后可以修改) (必会)
- Let、const有块级作用域、暂时性死区;
- Let、const不存在变量提升和重复性声明;
- Let、const声明的全局变量不会挂在顶层对象下面;
- Let定义变量,const定义常量且不可改变。
19. 箭头函数和普通函数的区别
- 箭头函数语法简单,清晰;
- 箭头函数没有prototype,所以本身没this;
- 箭头函数不会创建自己的this;
- Call/apply/bind无法改变this指向;
- 不能作为构造函数使用;
20. 构造函数和普通函数的区别
- 构造用new调用;
- 构造内部可以使用this,普通不建议,会指向window;
- 构造没有return返回值
- 构造首字母大写。
21. es6的新特性
- Let和const
- 解构赋值
- Includes可以判断一个数组是否包含一个指定的值,包含返回true,反之false
- 字符串、数值、函数、数组、对象的扩展
- Module导入模块
- Promise和async的运用
- Symbol
- Set和map
- Class
22. Promise
- Promise是es6提出的异步编程解决方案,解决了异步编程的回调地狱问题;
- Promise是一个构造函数,需要new关键字来生成它的实例对象;
- Promise接受一个函数作为参数,函数中的代码在new promise的时候会立即执行,我们可以再这里执行异步操作,并存在两个参数resolve和reject,也是函数,用来标记异步执行的状态,通过.then回调异步完成的回调,.catch则是失败的回调;
- Finally方法是最后都会执行的方法;
- all方法是几个条件都达成才能返回成功;
- Rice方法是几个条件都不满足才返回失败。
23. MVC和MVVM有什么区别?
- 在MVVM模式下,视图和模型只能通过ViewModel进行交互,他能监听数据的变化,然后通知视图更新,实际上实现了双向绑定;
- MVC是应用最广的软件架构之一,分为模型,视图,控制;MVC是单向通信;
- 区别
- MVC中Controller演变成MVVM的ViewModel
- MVVM通过数据来显示视图层而不是节点操作
- MVVM主要解决了MVC中大量的dom才做使页面渲染性能降低,加载速度变慢,影响用户体验的现象。
24. 怎么画一条0.5px的下划线以及普通的下划线怎么实现
- 缩放transform: scaleY(0.5);height: 1px;这样肯定是会变虚,
- 但是你可以指定变换的原点,加上这个transform-origin: 50% 100%;就不会有虚化
- .hr.scale-half {
- height: 1px;
- transform: scaleY(0.5);
- transform-origin: 50% 100%;
- }
下划线实现
- border-bottom
- ::before以及position: absolute去设置
25. 清除浮动
- .classic-clearfix::after {
- content: '';
- display: block;
- clear: both;
- }
26. em和rem区别
em相对于父元素,rem相对于根元素
27. Get和 Post区别
- Get请求通常是用于 从服务器端获取数据,Post请求通常用于将数据发送到服务器端;
- get可以刷新,post请求刷新会被重新提交;
- Get请求可以在书签收藏,post请求不能收藏;
- Get请求可以被缓存,Post不能;
- Get的安全性比较差,因为在url里能看到;
- Get请求数据长度有限制,通常放在url里,限制2048个字符;post请求没有长度限制。
28. set和map的区别
- Map是键值对的数据结构,而set是值的集
- Map可以通过get方法获取值,而set不行,因为他只有值
- 都能通过for of遍历
- Set是唯一可以用来数组去重,Map则做数据存储。