ES6简单理解基本使用
let const
- 原来的var声明标识符:可以重复声明,编译不报错.
- let,const声明标识符:不能重复声明,再声明编译报错.
- var声明的标识符作用域是当前函数,let和const是当前{块}.
- const声明的标识符不能再被赋值,也就是常量.
解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构.
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
具体语法简单而繁杂就不一一赘述了,重点记一下用途吧.以后碰到记得用
交换变量的值
let x = 1
let y = 2
[x,y] = [y,x]
从函数返回多个值
//返回一个数组
function 函数(){
return [1,2,3]
}
let [x,y,z] = 函数()
//返回一个对象
function 函数(){
return {
属性一的标识符:1,
属性二的标识符:2
}
}
let [属性一的标识符,属性二的标识符] = 函数()
函数参数的定义
//参数是一组有次序的值
function 函数([x,y,z]){...}
函数([1,2,3])
//函数是一组无序的值
function 函数({x,y,z}){...}
函数({z:3,y:2,x:1})
提取JSON数据
let jsonData = {id:42,status:"OK",data:[867,5309]}
let {id,status,data:number} = jsonData
//number === [867,5309]
函数参数的默认值
jQuery.ajax = function (url, {
async = true,
beforeSend = function () {},
cache = true,
complete = function () {},
crossDomain = false,
global = true,
// ... more config
} = {}) {
// ... do stuff
};
输入模块指定方法
const {sin,cos} = Math
const {函数名,函数名} = require('模块')
遍历map结构
...
函数的扩展
- 可以指定默认值
//解构赋值的默认值和参数默认值结合
function 函数(url,{body = '',method = 'GET'} = {}){...}
function 函数(url,{body ,method } = {body = '',method = 'GET'}){...}//这个有问题,注意和上一个的区别
- rest参数
functio 函数(...参数组){
console.log(typeof 参数组)//数组
}
- rest参数只能放到最后,否则报错
- 函数的length不包括rest参数
- 可以代替arguments使用,arguments不是数组有时候不方便.
- 尾调用优化,尾递归优化
...
扩展运算符和剩余参数
上代码:
复制数组和对象
let 数组1 = ['苹果','橘子','香蕉']
let 数组2 = [...数组1]
console.log(数组1 === 数组2)//false
let 对象1 = {name:'李华',age:'12'}
let 对象2 = {...对象1}
数组去重
let 数组1 = ['苹果','橘子','香蕉','苹果']
let 数组2 = [...new Set(数组1)]
合并数组
let 数组1 = ['西瓜','苹果']
let 数组2 = ['桃','香瓜','橘子']
let 数组3 = [...数组1,...数组2]//[ '西瓜', '苹果', '桃', '香瓜', '橘子' ]
let 数组4 = [...数组2,...数组1]//[ '桃', '香瓜', '橘子', '西瓜', '苹果' ]
console.log(数组3)
let 对象1 = {name='李华',age='13'}
let 对象2 = {爱好:'学习'}
let 对象3 = {...对象1,...对象2}
let 对象4 = {...对象1,...对象2,...{name:'小明'}}//{ name: '小明', age: '13', '爱好': '学习' }相同的键名会导致后面的覆盖前面的
调用函数时
let 函数 = (x,y,z)=>{console.log(x,y,z)}
let 数组 = [1,2,3]
函数(...数组)//把数组展开传参
函数声明时形参前加上...
let 函数 = function(...参数){
console.log(typeof 参数)
}
函数(1,2,3,4)//数组[1,2,3,4]
不过只能写在最后
这种情况叫剩余参数rest,其实就是将此处开始的参数转换成一个数组。
function fn(x,y,z){
let arg = [...arguments]
}
将伪数组转换成数组
[...document.querySelectorAll('div')]
[...'你好小伙砸']
Symbol
- Symbol表示独一无二的值,是第七种基本数据类型
let s = Symbol('描述字符串')//这里的描述字符串不影响Symbol,只是方便开发.
let ss = Symbol.for('全局Symbol的key,也作为对其的描述')//创建全局Symbol
console.log(Symbol.for('用户1') === Symbol.for('用户1'))//true
//先在全局Symbol注册表中查找key为'用户1'的Symbol,如果找到就反回这个Symbol,否则就创建一个全局Symbol
- Symbol的使用
...略
Set(集合)和Map(字典)数据结构
- 是一组键值对的结构,具有极快的查找速度.
js中对象的数据结构也是字典,只不过对象的key必须是字符串或symbol,map的key可以是任意类型
字典的key不能重复,如果重复放入key相同的键值对,会覆盖原来的value
let 字典 = new Map()//可以传入二维数组
字典.set('吃','eat')
字典.has('吃')
字典.delete('吃')
- Set对象是map键的集合,你可以按照插入的顺序迭代它的元素(好像和Python里的不一样),Set中的元素是唯一的.
...API略
异步编程
略.
class
语法糖,还是基于原型链,搞清楚prototype和__proto__就可以了
Promise
见下章...