es6相比es5增加的新特性
* 类
* 模块化
* 箭头函数
* 函数参数默认值
* 模板字符串
* 解构赋值
* 延展操作符(展开操作符)
* 对象属性简写
* Promise
* Let与Const
#### 1.类(class)
对熟悉Java,PHP等纯面向对象语言的开发者来说,都会对class有一种特殊的情怀。ES6 引入了class(类),让JavaScript的面向对象编程变得更加简单和易于理解。
```
<script type="text/javascript">
class user {
constructor(name,age){
this.name = name
this.age = age
}
getName(){
console.log(this.name)
}
getAge(){
console.log(this.age)
}
}
</script>
```
#### 2.模块化(Module)
ES5不支持原生的模块化,在ES6中模块作为重要的组成部分被添加进来。模块的功能主要由 export 和 import 组成。每一个模块都有自己单独的作用域,模块之间的相互调用关系是通过 export 来规定模块对外暴露的接口,通过import来引用其它模块提供的接口。同时还为模块创造了命名空间,防止函数的命名冲突.
#### 3.箭头(Arrow)函数
()=>{}
如果只有一个参数,()可以省略,
如果只有一个return,{}可以省略。
```
<script type="text/javascript">
let show = function (){
alert(1111)
}
show()
let show1 = ()=>{
alert(222)
}
show1()
let show2 = function (b){
alert(b * 2);
}
let show3 = b =>{
alert(b*2)
}
let show4 = function(b){
return b *2;
}
let show5 = b=>b*2
</script>
```
### 4.函数参数默认值
```
function demo(arg1= 10, arg2 = 'red')
{
// TODO
}
```
#### 5.模板字符串 ``
字符串模板,用反引号,这个可能被用在xss中。
let a=12
\`bbbb${a}ccccc`
在ES6中通过${}就可以完成字符串的拼接,只需要将变量放在大括号之中。
#### 6.解构赋值
很多语言都有这个特性,让代码更简单。
```
[a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2
```
#### 7.延展操作符
参数的扩展,就是不定个数的形参 ,...args 收集剩下的所有参数,位置必须是最后一个
function demo(a,b,...args){.............}
```
function demo(a,b,c){}
arr = [1,2,3]
demo(...arr)
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2];// 将 arr2 中所有元素附加到 arr1 后面并返回
//等同于
var arr4 = arr1.concat(arr2);
```
### 8.对象属性简写
~~~sh
const name='zhangsan',age='18',city='beijing';
const student = {
name,
age,
city
};
console.log(student);//{name: "zhangsan", age: "18", city: "beijing"}
~~~
#### 9.Promise
优雅的异步解决方案
~~~js
// 来用伪代码解释一下用法
var promise = new Promise(function (resolve, reject) {
// ... some code
if ( /* 异步操作成功 */ ) {
resolve(value);
} else {
reject(error);
}
});
promise().then(res=>{
/* resolve */
/* 成功回调 */
/* res为回调的参数 也就是value */
}).catch(err=>{
/* reject */
/* 失败回调 */
/* err为回调的参数 也就是error*/
})
~~~
**通俗的讲**
`resolve`会触发`then`方法,`reject`会触发`catch`方法
在执行`resolve`或者`reject`前,都叫做`Pending`状态
#### 10.支持let与const
var 声明变量的问题
可以重复声明
可以无限制修改
没有块级作用域
let 不能能重复声明变量,可以修改,块级作用域
const 声明常量,不能重复声明变量,也不能修改,块级作用域
- 序言
- 从业感悟
- 常用名词
- HTML
- JS
- ES6新特性
- jquery和vue对比
- 彻底理解this
- JQuery添加自定义函数
- js的实现
- 原始值和引用值
- MYSQL
- 简介
- 术语
- 特点
- 范式
- 数据类型1
- 数据类型2
- 编码
- 权限管理
- 事务
- mvvc
- 引擎
- MyISAM与InnoDB区别
- 索引类型
- 锁
- 死锁
- 分层架构
- 执行计划
- join原理
- 高可用
- 日志类型
- 分库分表
- 中间件
- 服务器
- 操作系统
- 信号量 锁 队列
- PHP
- composer加载原理
- composer基础知识
- 自动加载函数
- composer加载代码
- composer 自动加载
- 内存管理
- PHP执行流程
- cgi,fastCgi,php-fpm
- HTTP
- 错误码
- 跨域请求
- 面试
- 安全
- HTTP劫持
- 设计模式
- 如何正确的使用设计模式
- 单例模式
- 原型模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 设计原则
- 算法
- PHP短标签