总结

HTML部分
1、Html5的新特性
(1)语义化标签:语义化标签使得页面的内容结构化,见名知义
(2)增强型表单:HTML5 拥有多个新的表单 Input 输入类型。这些新特性提供了更好的输入控制和验证。
(3)视频和音频:HTML5 提供了播放音频文件的标准,即使用 元素
(4)Canvas绘图:标签只是图形容器,必须使用脚本来绘制图形
(5)拖放API:拖放是一种常见的特性,即抓取对象以后拖到另一个位置。

css部分
1、 CSS3有什么新特性
选择器、RGBA(颜色和透明度)和 透明度(opacity) 、多栏布局、多背景图、Word Wrap、文字阴影、@font-face属性 、圆角、边框图片、盒阴影、盒子大小、媒体查询、语音

2、 px和em,rem的区别
1. px实际上就是像素,用PX设置字体大小时,比较稳定和精确
2. em就是根据基准来缩放字体的大小。
3. rem是相对单位,是相对HTML根元素。

3、 CSS预处理语言
CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。
常见的预处理器为:Sass、LESS和Stylus

4、元素的隐藏与显示
1. display 显示:block:以块级元素显示; none:隐藏对象;特点:隐藏之后,不再为其保留位置。
2. visibility 可见性:visible:对象可以看见; hidden:对象隐藏不可见;特点:隐藏之后,继续保留原有位置
3. overflow 溢出: auto:超出自动显示滚动条,不超出不显示滚动条; hidden:不显示超过对象的内容,超出的部分隐藏掉;

5、 盒模型
盒模型是有两种标准的,一个是标准模型,一个是IE模型。
标准模型:宽高只是内容(content)的宽高,
IE模型:宽高是内容(content)+填充(padding)+边框(border)的总宽高。

6、过渡和动画
过渡:描述的是两个状态之间变换,需要触发才可以执行
transition-property:需要过渡属性的名字
transition-duration:过渡效果执行的时间
transition-delay;规定过渡何时开始
transition-timing-function:规定过渡的速度曲线
transition是合写
动画:描述的是多个状态之间的变换,不用触发,自己执行
animation-name
animation-duration
animation-delay
animation-timing-function
animation-iteration-count:动画执行的次数
animation-direction:规定是否轮流反向播放动画:alternate动画应该轮流反向播放

js部分

1、 你知道哪些状态码,都分别代表什么
200 - 服务器成功返回网页
403 - (禁止)服务器拒绝请求
404 - 请求的网页不存在
503 - 服务器超时
500 - 服务器内部错误)服务器遇到错误,无法完成请求

2、提交表单有几种方式
1. submit提交
在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮()就可以进行数据的提交,每一个input标签都需要有一个name属性,才能进行提交。
2. Ajax提交form表单
3. Easyui的form插件
4. form表单提交附件

3、 什么是闭包
“闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
特点:1)函数嵌套函数
2)函数内部可引用函数外部的变量和参数
3)参数和变量不会被垃圾回收机制回收,增大消耗,造成内存泄漏(解决:使用完后手动为它赋值为null)

4、什么是事件流
页面触发一个事件时,会按照一定的顺序来响应事件,事件的响应过程为事件。就我个人理解就是网页对点击事件的排序顺序就是事件流
1、冒泡型的事件流(由内到外)
从明确事件源到不明确的事件源依次向上响应。
2、捕获型的事件流(由外到内)
从不确定事件源到确定事件源依次向下响应。

5、 什么是事件代理
由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方法叫做事件的代理
(为父元素绑定事件,由子元素触发)

6、 sessionStorage和localStorage
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问
并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅、是会话级别的存储。只允许同一窗口访问。
而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。同源可以读取并修改localStorage数据。

7、 你知道的数组api
1. concat()方法用于合并两个或多个数组。
2. slice()方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象,原始数组不会被修改。
3. splice()方法始终会返回一个数组,该数组包含从原始数组中删除的项
4. join()使用指定的字符串用来分隔数组字符串
5. push()可接受任意类型的参数,将它们逐个添加到数组的末尾,并返回数组的长度
6. pop()从数组的末尾移除最后一项,减少数组的length值,返回移除的项
7. shift() 移除数组中的第一个项并且返回该项,同时将数组的长度减一。
8. unshift() 在数组的前端添加任意个项,并返回新数组的长度。
9. reverse() 方法用于颠倒数组中元素的顺序
10. String() 函数把对象的值转换为字符串。

8、 JavaScript的引用数据类型
对象Object、数组Array 、函数Function、Date等

9、块级元素和行内元素的垂直居中
块级元素:
1)可以给父级使用相对定位,子级使用绝对定位并margin:auto;,将top、left、right、bottom为0
2) 给父级和子级都加绝对定位,再给子级添加top:calc(50% - 子级元素高度一半)left:calc(50% - 子级元素宽度一半)
3) 给父级相对定位,子级绝对定位:left:50%;top:50%;
margin-left:-子级元素宽度一半;margin-top:-子级元素高度一半
4)给父级一个display:flex; align-items:center;再给子级添加:margin:0 auto;
行内元素:(display:inline-block;vertical-align:middle)
text-align:center;
line-heigth
10、对象的三大特性
三大特征分别为:封装,继承和多态
1. 封装
我们平时所用的方法和类都是一种封装,当我们在项目开发中,遇到一段功能的代码在好多地方重复使用的时候,我们可以把他单独封装成一个功能的方法,这样在我们需要使用的地方直接调用就可以了。
2. 继承
继承在我们的项目开发中主要使用为子类继承父类,下面是es6继承的书写方法
3. 多态
多态的具体表现为方法重载和方法重写:
方法重载:重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数
方法重写:重写(也叫覆盖)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样

11、图片的懒加载
当打开一个有很多图片的页面时,先只加载页面上看到的图片,等滚动到页面下面时,再加载所需的图片。这就是图片懒加载。

12、你理解的原型链
每个对象都可以有一个原型,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找… 这个操作被委托在整个原型链上,这个就是我们说的原型链了。

13、bom和dom 的区别
BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏览器本身进行操作,而后者是对浏览器(可看成容器)内的内容进行操作。应该说DOM包含了string、window、document(这三个是都是DOM里不同类别的对象)。window对象为模型中最高一级,window.document的写法正说明此点

14、jquery绑定事件
一:bind(type,[data],function(eventObject))
bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下:
type:事件类型,如click、change、mouseover等;
data:传入监听函数的参数,通过event.data取到。可选;
function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意
二:live(type, [data], fn)live方法把监听器绑定到了 document上了。不把监听器直接绑定在元素上,live利用了事件委托机制来完成事件的监听处理,把节点的处理委托给document。在监听函数中,我们可以用event.currentTarget来获取到当前捕捉到事件的节点。
三、on(type,[selector],[data],fn)

15、深拷贝及浅拷贝
深复制和浅复制最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。
深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
浅复制 —-只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做浅拷贝,
深复制 —-在计算机中开辟了一块新的内存地址用于存放复制的对象。

16、引用类型和值类型
值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null (这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值)
引用类型:对象(Object)、数组(Array)、函数(Function)

17、this理解和使用 bind call apply
Javascript中this总是指向调用它所在方法的对象。this的值通常是由所在函数的执行环境决定,也就是说要看函数是如何被调用的。同一个函数每一次调用,this都可能指向不同的对象。
构造函数中的this指向新创建的对象本身
call和apply: 指定函数内部的this指向,然后在所指定的作用域中,调用该函数,会立即执行该函数。
bind: 指定函数内部的this指向,然后返回一个新函数。bind方法不会立即执行一个函数,不兼容低版本IE

18、执行上下文
当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域)。一个执行上下文定义了一个函数执行时的环境。
在JavaScript解释器内部,每次调用执行上下文,分为两个阶段,①创建阶段 和 ②激活/代码执行阶段。

vue部分
1、let和var以及const有什么区别
var声明的变量会挂载在window上,而let和const声明的变量不会
var声明变量存在变量提升,let和const不存在变量提升
let和const声明形成块作用域
同一作用域下let和const不能声明同名变量,而var可以

2、 vue中的v-if和v-show的区别
相同点:v-if与v-show都可以动态控制dom元素显示隐藏
不同点:v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css–display:none,dom元素还在。

3、 MVVM和MVC的区别
MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。
MVC是Model-View- Controller的简写。即模型-视图-控制器。
主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。和当 Model 频繁发生变化,开发者需要主动更新到View 。

4、 vue的生命周期
vue实例对象由创建到页面渲染到最后销毁的整个过程
beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed

5、 vue和jQuery的区别
jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$("lable").val();,它还是依赖DOM元素的值。

Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

6、vuex有几种属性
有五种,分别是State , Getter , Mutation , Action , Module (就是mapAction)
state就是存放数据的地方,类似一个仓库 , 特性就是当mutation修改了state的数据的时候,他会动态的去修改所有的调用这个变量的所有组件里面的值
getter用来获取数据,mapgetter经常在计算属性中被使用
Action 于 mutation 类似,不同在于:
Action 提交的是 mutation,而不是直接变更状态。
Action 可以包含任意异步操作

7、如何获取v-for的索引值
在 v-for 代码块中,我们可以完全地访问父级作用域下的属性。
v-for 还支持可选的第二个参数,作为当前项的索引。
也可以使用 v-for 来遍历对象的属性。
还可以提供第二个参数,作为对象的键名(key):

8、怎么监听数据变化,深度监听和浅监听,设置深度监听与否的属性是哪个
我们通常通过watch来监听数据的变化,然后做相应的处理,但是我们发现有时候watch无法监听对象内部的变化,这时候我们就需要用到深度监听,因为我们要知道浅度监听和深度监听的区别,浅度监听只能监听到数组长度的变化比如数组中添加一个元素,或者是某个值的变化比如改变data中a的值,但是如果想要监听某个对象内部值的变化,浅度监听就没有监听对象的变化,这时候就要用到深度监听属性是deep:true。

9、数据的双向绑定
vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化
vue实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。在MDN上对该方法的说明是:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。它接收三个参数,要操作的对象,要定义或修改的对象属性名,属性描述符。重点就是最后的属性描述符。属性描述符是一个对象,主要有两种形式:数据描述符和存取描述符。这两种对象只能选择一种使用,不能混合两种描述符的属性同时使用。上面说的get和set就是属于存取描述符对象的属性。然后我们可以通过在存取描述符中的get和set方法内写入自定义的逻辑来实现对象获取属性和设置属性时的行为。

10、Vue指令有哪些
v-text主要用来更新textContent,可以等同于JS的text属性。
v-html指令。它等同于JS的innerHtml属性
v-pre主要用来跳过这个元素和它的子元素编译过程。可以用来显示原始的Mustache标签。
v-once关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能。
v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。
v-else是搭配v-if使用的,它必须紧跟在v-if或者v-else-if后面,否则不起作用。
v-else-if充当v-if的else-if块,可以链式的使用多次。可以更加方便的实现switch语句。
v-show的元素会始终被渲染并保存在dom中,它只是简单的切换css的dispaly属性。
注意:v-if有更高的切换开销
v-show有更高的初始渲染开销。
因此,如果要非常频繁的切换,则使用v-show较好;如果在运行时条件不太可能改变,则v-if较好
v-for指令根据遍历数组来进行渲染
注意:当v-for和v-if同处于一个节点时,v-for的优先级比v-if更高。这意味着v-if将运行在每个v-for循环中
v-bind用来动态的绑定一个或者多个特性。
v-model这个指令用于在表单上创建双向数据绑定。
v-model会忽略所有表单元素的value、checked、selected特性的初始值。因为它选择Vue实例数据做为具体的值。
v-on主要用来监听dom事件,以便执行一些代码块。表达式可以是一个方法名。
事件修饰符

.stop 阻止事件继续传播
.prevent 事件不再重载页面
.capture 使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
.self 只当在 event.target 是当前元素自身时触发处理函数
.once 事件将只会触发一次
.passive 告诉浏览器你不想阻止事件的默认行为

11、Vue路由,路由如何跳转,有几种跳转方式
Vue.js 路由允许我们通过不同的 URL 访问不同的内容。通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。vue-router路由的原理是通过改变网址,来实现页面的局部刷新,相比a标签跳转的不同之处在于,路由跳转不需要刷新整个页面。
1.router-link中链接如果是’/‘开始就是从根路由开始,如果开始不带’/’,则从当前路由开始。
2.this.$router.push 跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面
3.this.$router.replace 跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)
4.this.$router.go(n) 向前或者向后跳转n个页面,n可为正整数或负整数

12、Import和export
export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
import用于在一个模块中加载另一个含有export接口的模块。
也就是说使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。
export和export default的区别
1、export与export default均可用于导出常量、函数、文件、模块等
2、你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用
3、在一个文件或模块中,export、import可以有多个,export default仅有一个
4、通过export方式导出,在导入时要加{ },export default则不需要

其它
1、 Ajax和Axios的区别
Ajax 是指一种创建交互式网页应用的网页开发技术。是异步 JavaScript 和 XML(标准通用标记语言的子集)。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
axios用于浏览器和node.js的基于Promise的HTTP客户端
1. 从浏览器制作XMLHttpRequests
2. 让HTTP从node.js的请求
3. 支持Promise API
4. 拦截请求和响应
5. 转换请求和响应数据
6. 取消请求
7. 自动转换为JSON数据
8. 客户端支持防止XSRF

2、有哪些网络协议
常用的网络协议有TCP/IP协议、HTTP协议、FTP协议、Telnet协议、FTP协议、SMTP协议、NFS协议、UDP协议等。
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

3、简述TCP的三次握手过程
TCP握手协议 :在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。

4、请说一下http请求的基本过程
1. 连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。
2. 请求 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令
3. 应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mydir的文件index.html。

5、http与https的区别
1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

6、使用过哪些git命令
git init / git status/ git add /git commit -m /git remote add origin
git pull origin master/ git push origin master

7、使用过哪些linux命令
cd(切换目录)、ls(查看目录)、rm(移除)、mv(移动/重命名)、mkdir(创建文件夹)、touch(创建文件)、cp(拷贝)、tar(打包) 、zip(压缩)、unzip(解压缩)、more(预览)

8、是否使用过svn
用过,SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

ES6部分
1、 promise本身是同步方法,但是他的 .then()和.catch()是异步方法

2、Promise
Promise是异步编程的一种解决方案,它相当于一个容器,里面保存着未来才会结束的事件,它也主要是用来解决回调地狱的问题。
promise是一个对象,代表一个异步操作,有三种状态,进行中,成功,失败(pending,resolve,reject)。只有异步操作的结果的可以决定当前是哪种状态,promise一旦新建执行,就没有办法中途停止。
promise允许函数作为参数传入,res为成功的回调,rej为失败的回调,当条件满足时,res/rej会将成功或失败的结果暴露出来。
通过.then拿到暴露出来的结果,.then是一个全新的promise函数,.then允许两个函数作为参数,一个函数拿到成功的暴露结果,一个拿失败暴露的结果。
通过catch获取一个指定发生错误时的回调函数。error为错误信息。
一般来说,不要在then方法里面定义 rej状态的回调函数(即then的第二个参数),总是使用catch方法。

3、es6新特性
1、ES6推荐使用let声明局部变量,相比之前的var(无论声明在何处,都会被视为声明在函数的最顶部)
let和var声明的区别:局部作用域、变量提升、重复定义
let表示声明变量,而const表示声明常量,两者都为块级作用域;const 声明的变量都会被认为是常量,意思就是它的值被设置完成后就不能再修改了:
如果const的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址没有变就行:
let 关键词声明的变量不具备变量提升(hoisting)特性
let 和 const 声明只在最靠近的一个块中(花括号内)有效
当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
const 在声明时必须被赋值
2、模版字符串:使用 反引号``(键盘上esc下面那个键) 将整个字符串包裹起来,而在其中使用 ${} 来包裹一个变量或者一个表达式
3、箭头函数就是函数的一种简写形式,使用括号包裹参数,跟随一个 =>,紧接着是函数体;
不需要 function 关键字来创建函数
省略 return 关键字
继承当前上下文的 this 关键字
4、for…of 用于遍历一个迭代器
for…in 用来遍历对象中的属性
5、字符串的扩展includes(), startsWith(), endsWith()
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
6、数值的扩展
从ES5开始,在严格模式之中,八进制就不再允许使用前缀 0 表示,ES6进一步明确,要使用前缀 0o 表示。
Number.isFinite()
Number.isFinite() 用来检查一个数值是否非无穷(infinity)。Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isNaN()
Number.isNaN() 用来检查一个值是否为 NaN 。
7、Math对象的扩展
Math.trunc 方法用于去除一个数的小数部分,返回整数部分。
Math.sign 方法用来判断一个数到底是正数、负数、还是零。
Math.cbrt 方法用于计算一个数的立方根。
Math.fround方法返回一个数的单精度浮点数形式。
Math.hypot 方法返回所有参数的平方和的平方根。
8、数组的扩展
(1)Array.from 方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
实际应用中,常见的类似数组的对象是DOM操作返回的NodeList集合,以及函数内部的 arguments 对象。 Array.from 都可以将它们转为真正的数组。
(2)Array.of 方法用于将一组值,转换为数组。
(3)find 方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为 true 的成员,然后返回该成员。如果没有符合条件的成员,则返回 undefined 。
(4) findIndex 方法的用法与 find 方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回 -1 。
(5)entries() , keys() 和 values() ——用于遍历数组。唯一的区别是 keys() 是对键名的遍历、 values() 是对键值的遍历, entries() 是对键值对的遍历。
9、rest参数(形式为“…变量名”),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
对象的扩展属性的简洁表示法:ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等
于属性名所代表的变量。
10、Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,
复制到目标对象(target)。
如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性
Object.assign 方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
Object.assign 方法有很多用处。
11、ES6属性的遍历5种方法
1.for…in 循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
2.Object.keys(obj)返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
3.Object.getOwnPropertyNames(obj)返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
4.Object.getOwnPropertySymbols(obj)返回一个数组,包含对象自身的所有Symbol属性。
5.Reflect.ownKeys(obj)返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。

4、Symbol
ES5的对象属性名都是字符串,这容易造成属性名的冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入Symbol的原因。
注意,Symbol值作为对象属性名时,不能用点运算符。

5、Set和Map数据结构
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。
Set实例的属性和方法
1.Set.prototype.constructor :构造函数,默认就是 Set 函数。
2.Set.prototype.size :返回 Set 实例的成员总数。
3.add(value) :添加某个值,返回Set结构本身。
4.delete(value) :删除某个值,返回一个布尔值,表示删除是否成功。
5.has(value) :返回一个布尔值,表示该值是否为 Set 的成员。
6.clear() :清除所有成员,没有返回值。
Map结构的目的和基本用法
JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
Map原生提供三个遍历器生成函数和一个遍历方法。
keys() :返回键名的遍历器。
values() :返回键值的遍历器。
entries() :返回所有成员的遍历器。
forEach() :遍历Map的所有成员。

6、Generator 函数
Generator函数有多种理解角度。从语法上,首先可以把它理解成,Generator函数是一个状态机,封装了多个内部状态。
执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历Generator函数内部的每一个状态。
形式上,Generator函数是一个普通函数,但是有两个特征。一是, function关键字与函数名之间有一个星号;二是,函数体内部使用 yield语句,定义不同的内部状态(yield语句在英语里的意思就是“产出”)。

7、Es6写的类对比es5的优点
ES6中的对象的方法不需要单独写在原型链中
ES6中多了静态方法的声明与使用,静态方法是实例对象无法调用的,是通过原型.方法名进行调用,静态方法 多数用于存储 公共方法,比如说要给 这一批 同类对象 进行排序等
类的继承中继承关系是相反的(es6:先有父类,再有子类,es5则反之),写法也不一样
ES6类和模块是严格模式下的,不存在变量提升,保证子类父类的顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值