let与const
相同点:
1,存在块级作用域
2,不存在变量提升(暂时性死区)
3,在全局环境下定义的变量,不会挂载到window对象上
不同点
let:
定义变量(不能再次定义,值可以修改)
const:
定义常量(不能再次定义,值不能修改)
定义常量时必须有值
注意:其实定义的复杂类型是可以修改值得,只是不能修改地址
const obj={
name:'lili',
age:'15'
}
obj.age=18
obj.name='yiyi'
console.log(obj) //{name: "yiyi",age: 18}
对象属性简写
const obj={
name,
say(){
console.log('99')
}
}
console.log(obj)
当属性名与属性值相同时,如name:name 可以简写 name
当属性名对应的是函数时,:function可以简写
解构赋值
对象
const obj={name:'li',age:20}
const {name,age} =obj
深层次解构:
const obj={name:'li',age:10,hobby:{game:'play',read:'书籍'}}
const {name:l,age,hobby:{game,read}}=obj //一一对应即可
console.log(l,age,game,read) //li 10 play 书籍
数组:
let arr =[1,2,45,23,344]
const [a,b,c,d,e,f]=arr
console.log(a,b,c) //1 2 45
console.log(a,b,c,d,e,f) //1 2 45 23 344 undefined
按需取值:
let arr =[1,2,45,23,344]
const [,a,b,c]=arr
console.log(a,b,c) //2 45 23
let =[1,2,45,23,344]
const [,...a]=arr
console.log(a) //[2,45,23,344]
let arr=[1,2,3,[7,8,90]]
const [,,a,[,,b]]=arr
console.log(a,b) //3 90
函数相关
1,箭头函数
完整写法
const fn=(a,b)=>{
return a+b
}
当写在一行时,可以省略return
const fn=(a,b)=>a+b
当只有一个参数时,可以省略()
const fn=a=>a+10
注意:和普通函数的区别:
(1),没有arguments
(2),没有this (使用外部作用域的this)
const obj={
age:18,
say(){
console.log(this)
},
say1:()=>{
console.log(this)
},
say2(){
setTimeout(()=>{
console.log(this)
},1000)
}
}
console.log(obj.say())//obj
console.log(obj.say1())//windon
console.log(obj.say2())//obj
2,参数默认值写法:
以前的写法:
function fn(a){
a = a || "10"
console.log(a)
}
现在的写法:
function fn(a=10){
console.log(a)
}
3,匹配剩余参数
const add=(...args)=>{
let result=0
for(let i=0;i<args.length;i++){
result+=args[i]
}
console.log(result)
}
console.log(add(1,2,56,9))
set集合
集合是由一组无序且唯一(即不能重复)的项组成的,可以想象成集合是一个既没有重复元素,也没有顺序概念的数组
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值
Set 本身是一个构造函数,用来生成 Set 数据结构
const s=new Set()
const arr=[1,2,3,42,4,1]
arr.forEach(d=>s.add(d))
//得到一个新的set集合
console.log(s)
//数组去重
console.log( [...new Set(arr)])
map
共同点:集合、字典可以存储不重复的值
不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储