一.let
1.let声明的变量只在所处的块级作用域有效 也就是{}声明的变量只能在{}里使用外部不能使用
2.let声明不存在变量提升 var声明的有变量提升可以先使用后声明,而let却没有,所有不能先使用后声明
3.暂时性死区:
如:
let a = 1
function m () {
a = 2
let a
console.log(a); //就会报错,因为你在块级作用域中使用了let 就会进行绑定,只能在块级作用域查找就会发现你先使用后声明就会错
}
m()
2.const
1.const是声明常量的,常量就是不能变化的量不可以修改
2.const声名的常量也具有块级作用域
3.声明常量时必须赋初始值
4.但复杂数据类型 数组 对象 是可以修改内部的值
5.常量的值可以修改但不能修改内存地址,如果直接赋值就会修改内存地址,如果是复杂数据类型,数据类型是地址就不可以修改,但里面的数据可以修改
总结:var let const 区别:
1.使用var声明的变量,其作用域为所有函数内,存在变量提升。
2.使用let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。
3.使用const 声明的是常量 ,在以后出现的代码中,不能再修改常量的值
二.解构赋值
定义:允许我们按照一一对应的关系从数组中提取值然后将值赋值给变量
1.数组解构
数组解构
let [a,b,c] =[ 1,2,3] //有三个变量 a,b,c
2.对象解构
1.第一种
let a ={name:'wang' ,age:18}
let {name ,age } = a // 新声明的变量与赋值变量对象相同
2.第二种
let a = {name:'wnag',age:18}
let {name:c ,age:b} = a
console.log(c b)
//这种写法变量可以与对象不同
三.箭头函数
1.通常将箭头函数赋值给变量 调用变量就可以调用函数
let a =()=>{}
当函数体中只有一句代码,且代码的执行结构就是返回值,可以省略大括号 如果形参只有一个时可以省略小括号
2.this的指向
箭头函数没有自己的this,监听函数的this就是定义位置的上下文thsi
四.剩余参数
1.当剩余的参数大于实参时我们可以将不定数量的参数表示为一个数组
使用:
function name (a,b,...c){
console.log(a, b ,c); //参数就会将6 和7整合成一个数组全部保存起来
}
name(1,5,6,7)
2.剩余参数与解构配合使用
let a = [1,2,3,5,6,7]
let [b,...c] = a
console.log(b,c); //c为接收第二个以后的 1 , [2, 3, 5, 6, 7]
五.扩展运算符
1.扩展运 算符可以将数组拆分为以逗号分割的参数序列
let a = [1,2,3,5,6,7]
console.log(...a); // 1,2,3,5,6,7
2.将两个数组合并
1.方法一
let a = [1,2,3,5,6,7]
let b= [1,2,3,5,6,7,8,9]
console.log(...a , ...b)
2.方法二
a.push(...b)
可以利用扩展运算符将伪数组扩展为真数组
2.Array的扩展方法
1.将数组或可遍历对象转化为真数组
let a ={
'0':'张三',
'1':'张三1',
'2':'张三2',
'3':'张三3',
'length':3
}
let b = Array.from(a)
console.log(b); //['张三', '张三1', '张三2'] 必须要有 'length'
2.还可以接受第二个参数,作用类似于数组的mao方法,用来对每个元素进行处理,将处理后的值放回返回的数组
如:
let a ={
'0':'0',
'1':'1',
'2':'2',
'3':'3',
'length':4
}
let b = Array.from(a,(item)=>{
return item*1 + 1
})
console.log(b ); // [1, 2, 3, 4]
2.find方法
1.用于找出第一个符合条件的数组成员,如果没有找到返回undfined
let a =[ 1,2,3,4]
let b = a.find((item,index)=>{
return item === 4
//第一个参数是值,第二个参数是索引值
console.log(item);
})
console.log(b );
3.findindex()
用于找出第一个符合条件的数组成员索引值,如果没有找到返回-1,如果返回多个值就会返回0 如果返回一个值所找到的值
如:
let a =[ 1,2,3,4]
let b = a.findIndex((item,index)=>{
return item === 4 //当有这个值时就会返回
})
console.log(b );
4.includes()
表示某个数组是否包含给定的值,返回布尔值
let a =[ 2,3,4,5]
console.log( a.includes(1)); //false
六.String的扩展方法
1.startsWith():表示字符串是否在原字符串的头部,返回布尔值
2.endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值
3.repeat():表示将原字符串重复n次,返回一个新字符串
使用:
'x'.repeat(3)
七.set数据结构
1.set它类似数组,但是成员的值都是唯一的,没有重复的
2.set本身是个构造函数,生成set数据结构
3.set函数可以接受一个数组作为参数,用来初始化
4.set可以用于属性去重
const a = new Set([1,2,2,3]) //两个2只能识别1个
console.log(a);
let b = [...a]
console.log(b);
4.set数据实例方法
add(value):添加某个值,返回set结构本身
delete(value):删除某个值,返回一个布尔值,表示删除成功
has(value):返回一个布尔值,表示该值是否为set成员
clear():清除所有的成员,没有返回值
const a = new Set(['a','a','a','b','3'])
a.add(1) //追加一个1
a.delete('a') //删除 字符a
a.has(1) //查询是否有1
a.clear() //清空所有
console.log(a);
console.log(a.has(1));