这是我参与「第五届青训营 」笔记创作活动的第1天
let 关键字
用来声明变量,使用 let 声明的变量有几个特点:
-
不允许重复声明
let a 不能再写一个let a
-
块级作用域
一个括号就是块级作用域{},包括eval
- 不存在变量提升
- 不影响作用域链
const 关键字
就是常量let
变量的解构赋值
const arr = ['张学友', '刘德华', '黎明', '郭富城'];
let [zhang, liu, li, guo] = arr;
//等同于
let zhang='张学友',
let liu='刘德华'……
模板字符串
`两个反引号中间就是模板字符串`
`可以
换行`
`可以用 ${xxx}输出变量`
简化对象写法
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
箭头函数
let function =()=>{
}
- 如果形参只有一个,则小括号可以省略
- 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果
- 箭头函数 this 指向声明时所在作用域下 this 的值
- 箭头函数不能作为构造函数实例化
- 不能使用 arguments
rest 参数
ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments
/**
* 作用与 arguments 类似
*/
function add(...args){
console.log(args);
}
add(1,2,3,4,5);
/**
* rest 参数必须是最后一个形参
*/
function minus(a,b,...args){
console.log(a,b,args);
}
minus(100,1,2,3,4,5,19);
spread 扩展运算符
let body=['丁真','孙笑川','陈睿']
...body=='丁真','孙笑川','陈睿'//去掉'[]'
//另外也可以展开对象(去掉'{}')
Symbol
第7种数据类型
- Symbol 的值是唯一的,用来解决命名冲突的问题
- Symbol 值不能与其他数据进行运算
- Symbol 定义 的 对象属 性 不能 使 用 for…in 循 环遍 历 ,但 是可 以 使 用Reflect.ownKeys 来获取对象的所有键名
注意:
let a = Symbol('i');
let b = Symbol('i');
console.log(a === b);//false
let c = Symbol.for('j');
let d = Symbol.for('j');
console.log(c === d)//true
Map
特殊的键值对集合,键不止字符串,可以是任何东西
- size 返回 Map 的元素个数
- set 增加一个新元素,返回当前 Map
- get 返回键名对象的键值
- has 检测 Map 中是否包含某个元素,返回 boolean 值
- clear 清空集合,返回 undefined
Set
集合,元素不可重复,可以使用『扩展运算符』和『for…of…』,用let a=new Set()创建
- size返回集合的元素个数
- add 增加一个新元素,返回当前集合
- delete 删除元素,返回 boolean 值
- has 检测集合中是否包含某个元素,返回 boolean 值
- clear 清空集合,返回 undefined
用途:结合扩展运算符去重;结合扩展运算符,filter做交/并集
数值扩展
- number.EPSILON
- 二进制0b-八进制0o-十六进制0x
- Number.isFinite() 用来检查一个数值是否为有限的
- Number.isNaN() 用来检查一个值是否为 NaN
- ES6 将全局方法 parseInt 和 parseFloat,移植到 Number 对象上面,使用不变。
- Number.isInteger() 用来判断一个数值是否为整数
- Math.trunc用于去除一个数的小数部分,返回整数部分。
ES6 模块化语法
export 命令用于规定模块的对外接口
import 命令用于输入其他模块提供的功能
class 类
一个语法糖
//1.class 声明类
class star{
//构造函数
constructor(name,age){
this.name=name;
this.age=age;
}
//方法,不准用 function
do(){
console.log('星星');
}
// static 定义静态方法和属性,属于'类'不是对象,实例对象的对象原型指向原型对象
static light='true'
//get:读取时调用set:写入时调用,可以用来数据单/双向绑定
get name(){
console.log('读取name');
}
set name(){
console.log('写入name');
}
}
let xxx=new star();
//extends 继承父类
class sun extends star{
constructor(name,age,satellite){
super(name,age);
this.satellite=satellite;
}
//父类方法可以重写
do(){
//调用父类方法
super.do()
console.log('太阳');
}
}
迭代器
遍历器(Iterator)就是一种机制。它是一种接口(对象里的属性),为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。主要供 for...of 消费
原生具备 iterator 接口的数据(可用 for of 遍历)
Array,Arguments,Set,Map, String,TypedArray, NodeList
注意!:没有object,object要么用foreach要么自定义Iterator 接口
let arr=['何同学','丁真','谷爱凌']
for (const iterator of object) {
console.log(iterator); //'何同学','丁真','谷爱凌'
}//原理:不断调用next方法,直到next为空
生成器
function * gen(){
yield '一只没有耳朵';
yield '一只没有尾巴';
return '真奇怪';
}
let iterator = gen();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
- 生成器函数返回的结果是迭代器对象,调用迭代器对象的 next 方法可以得到yield 语句后的值
- yield 相当于函数的暂停标记,也可以认为是函数的分隔符,每调用一次 next方法,执行一段代码
- next 方法可以传递实参,作为 yield 语句的返回值
Promise
重点:
- Promise 构造函数: Promise (excutor) {}
- Promise.prototype.then 方法
- Promise.prototype.catch 方法
const p=new Promise(function(resolve,reject){
let data='数据';
let err='失败数据';
setTimeout(() => {
resolve(data)//成功
reject(err)//失败
}, timeout);
})
//此时调用then方法
p.then(function(value){
console.log('成功数据value')//value是data
},function(reson){
console.log('失败数据reason')//reason是err
})
then返回值是Promise,如果不是Promise,值是返回值,状态是成功
Promise一共有三种状态: 未决定的:pending 成功:resolved、fulfilled 失败:rejected
Promise.prototype.catch 方法:抓住错误 参考:尚硅谷es6