一、 let 和const
1.1、ES5中声明变量var的缺陷
console.log(num)//undefind
var num=10
console.log(num)//10
var的特点(缺陷)
- 1、
预解析:js代码从上往下解析之前,会先对变量声明进行提升(预解析),因为这个特点,同时还可以重复声明变量,同时变量还可以先使用后定义 - 2、
没有块级作用域:首先要明白一点在if和for语句大括号里面声明的变量是局部变量,也叫块级变量,但是呢用var声明的变量就没有这个概念,用var在if和for声明的变量都会变成全局变量
1.2、ES6 let和const的特点
let的特点
- 1、let的特点:没有预解析,变量不允许重复声明,变量必须先定义后使用。
- 2、有块级作用域,在if和for申明的变量,只能在if和for的大括号中使用。 const的特点
- 1 他是用来定义常量,只能在声明的时候赋值一次,后面就不允许了,同时用const定义的常量是不允许修改的。
1.3 、let与const区别
二、 解构赋值(变量的简写语法)
1、对象的解构赋值
1.1:取出对象的属性赋值给变量
语法格式 let{属性名}=对象名
<script>
let obj={
name:'张三',
age:18,
sex:'男'
}
// ES5的写法
// let name=obj.name
// let age=obj.age
// let sex=obj.sex
// console.log(name,age,sex);
// ES6的解构赋值简写
// 他的原理就是就是ES5的赋值的简写
let {name,age,sex}=obj
console.log(name,age,sex)
</script>
1.2、取出变量的值赋值给对象的属性
注意点
-
使用解构赋值前提是属性名跟变量名保持一致,如果属性跟变量不一致,就不能用解构赋值 -
如果解构的属性没有那个属性,就会使用默认属性 -
解构赋值重新命名的话就用:例如let obj1={name,age:ageAder,sex}
let name='张三'
let age=18
let sex='女'
// ES5的写法
let obj={
name:name,
age:age,
sex:sex
}
console.log(obj);
// ES6的解构赋值语法
// 使用解构赋值前提是属性名跟变量名保持一致,不然属性不一致,就不能用解构赋值
let obj1={name,age,sex}
console.log(obj1);
2、数组的解构赋值
<script>
// ES5的取出数组的元素赋值给变量
let arr =[10,20,30,40]
let n1=arr[0]
let n2=arr[1]
let n3=arr[2]
let n4=arr[3]
console.log(n1,n2,n3,n4);
//ES6取出数组的元素并赋值
let arr1=[m1,m2,m3,m4]=arr
// 取出变量的值,赋值给数组的元素
let num1=66
let num2=88
let num3=100
let num4=99
let arr2=[num1,num2,num3,num4]
</script>
小案例
<script>
// 解构赋值的案例
function fn({username,password}){
console.log(username,password);
// let obj1= {username,password}=obj
// console.log(obj1);
// console.log(obj);
}
fn({username:'adim',password:'123456'})
</script>
三、箭头函数
什么是箭头函数:可以理解为他是function的简写
箭头函数的特点:
- 把function单词替换成=>
- 形参的扩号()移动到箭头函数的左边
- 如果箭头函数只有一个形参,可以省略形参的小括号
- 如果箭头函数的函数只有一行代码,可以省略大括号,同时有return也要省略
- 箭头函数不能完全替代function,箭头函数与function函数唯一的区别就是this执行的不同
- 箭头函数this指向:箭头函数没有this
- 箭头函数中使用this,会访问上级作用this
- 原因:箭头函数没有this,因为作用域链的关系,就会往上级作用域查找this
fn1=()=>{
}
补充:普通function函数this执行三种情况
- this:谁调用我,我就指向谁
- 普通函数,this执行window
- 对象方法, this指向对象
- 构造函数, this指向实例对象
四、解构赋值"..."
相当于遍历对象简写,拿到里面的每一项的值。
// 相当于遍历对象简写,拿到里面的每一项的值。
let arr1=[10,20,30,40,50]
let arr2=[60,70,80,90,100]
arr1.push(...arr2)
console.log(arr1);
四、数据类型Set(数组去重)
概念:数据类型Set(集合):类似于数组,与数组唯一的区别是:不能存储重复的元素
// 数据类型set(集合):类似于数组,与数组唯一的区别是:不能存储重复的元素
let arr =[10,20,10,40,60,20,10,40,50]
// 声明set
let set= new Set(arr)
console.log(set,"利用set去重后的数据");
let arr2=Array.from(set)
console.log(arr2,"把set去重后的数组转为真数组");