ES6新特性
1. let关键字
变量不能重复声明(var可以重复声明,覆盖)
块级作用域
不存在变量提升
2.const关键字
声明常量,需要赋初值(一般常量大写)
常量值不能修改
块级作用域
对于数组和对象里的元素修改,不算对常量的修改不会报错
3.变量解构赋值
允许从数组和对象提取值,对变量赋值
-数组的解构
let [test1, test2] = arr;
-对象的解构
let { func } = objectEg;
4.模板字符串
新的声明字符串方式: 反引号 ``
特性:
-内容中可以直接出现换行符
let str = `<li>
Animuss
</li>`
-变量拼接
let name = 'Animuss';
let demo = `${name}嗨嗨嗨`;
5.简化对象写法
允许在大括号里直接写入变量和函数作为对象的属性和方法
let name = 'Animuss';
let change = function(){}
const demo = {
name,
change
}
6.箭头函数
()=>{}
特性:
-this是静态的,this始终指向函数声明时所在作用域下的this
-不能作为构造函数实例化对象
let Person = (name, age) => {
this.name = name;
this.age= age;
}
let me = new Person('jl', 20);
-不能使用 arguments 变量
7.函数默认值
-形参初始值
-与解构赋值结合
function connect({host, username}){
}
connect({
host: 'localhost',
username: 'xx'
})
8.rest参数
获取函数的实参,代替arguments,输出的是数组
function data(...args){}
data('还', '嗨');
-rest 参数必须放到最后
9.扩展运算符
... 将数组转换为 逗号分割的参数序列
-应用
--数组合并
--数组克隆
--转换伪数组
10.symbol
新的原始数据对象Symbol,独一无二的值,JS的第七种数据类型,类似字符串的数据类型
//USONB
//undefined、symbol、string、object、null、number、boolean
特点
-值唯一,解决命名冲突问题
-值不能与其他数据运算
-定义的对象属性不能用for..in循环遍历
let s = Symbol();
let s2 = Symbol('Animuss');
let s3 = Symbol.for('Animuss');
场景
-给对象添加方法, 安全(避免重名)
let game = {}
let methods = {
up: Symbol(),
down: Symbol()
};
game[methods.up] = function(){};
-Symbol内置属性
11.迭代器Iterator
任何数据结构只要有Iterator接口(属性),就可以实验for..of循环
for(let i Of items) 输出的i是键值
for(let i in items) 输出的i是键名
原生具备iterator接口的数据:
-array、arguments、set、map、string、typedarray、nodeList
-原理:
1.创建一个指针对象,指向当前数据结构的起点
2.第一次调用对象的next方法,指针自动指向数据结构的第一个成员
3.不断调用next方法,指针后移,直到指向最后一个成员
4.每次调用next方法返回一个包含value和done属性的对象
12.生成器generator
异步编程
function* gen(){
//分割, 分成几段,调一次next执行一段
yield '嗨嗨嗨';
//分割
yield '老八'
}
let iterator = gem();
iterator.next(); //next执行生成器定义的方法,可以传入实参
13.Promise
es6引入的异步编程解决方案,构造函数
封装异步操作并获得成功或失败的结果
//实例化
const p = new Promise(function(reslove, reject){
resolve();
reject();
})
//调用then方法
p.then(function(value){
//成功
}, function(reason){
//失败
})
//catch 失败回调 相当于语法糖
p.catch(function(reason){})
14.set集合
类似数组,成员值唯一
let s = new Set();
方法:
.add
.delete
.has
.clear
15.Map键值对集合
键 - 各种类型的值都可以当作键
let m = new Map()
方法:
.set
.delete
.get
16.class类
class Phone(brand, price){
this.brand = brand;
this.price = price;
call(){
console.log('call!')
}
}
let iPhone = new Phone('iphone', 5299)
17.数值扩展
-1.八进制和二进制
let o = 0b1010;
-2. Number.isFinite 是否为有限数
-3. Number.isNaN 是否为NaN
-4 Number.parseInt、parseFloat 字符串转整数
-6 Number.isInteger 是否为整数
-7 Math.trunc 抹掉小数部分
-8 Math.sign 判断数为正数负数零
18.对象方法扩展is、assign、set/getPrototypeof
-1. Object.is 判断两个值是否完全相等
判断两个NaN为true, ===会为false
-2. Object.assign 对象合并
Object.assign(Object1, Object2);
用2把1覆盖
如果对象的属性值为简单类型(string、number),则为深拷贝;
如果对象 属性值为对象或引用类型,则是j
-3. Object.setPrototypeOf 设置原型对象
Object.getPrototypeOf 获取原型对象
19.模块化
import export