1.对象解构赋值
1.解构赋值:变量赋值的简写语法
2.对象解构:
2.1 取出对象的属性值 赋值给 变量
2.2 取出变量的值 赋值给 对象
// 1 取出对象的属性值 赋值给 变量
let obj={
name:'张三',
age:20,
sex:'男'
}
// ES5
// let name=obj.name
// let age=obj.age
// let sex=obj.sex
// console.log(name,age,sex)
// ES6
// let name=obj.name
// let age=obj.age
// let sex=obj.sex
let {name,age,sex,score}=obj
console.log(name,age,sex,score)
// 2 取出变量的值 赋值给 对象
let username='admin'
let password='123'
let lin='123456'
// ES5
// let user={
// username:username,
// password:password
// }
// ES6
let user={
username, //username:username
password,
touxiang:lin,
eat(){ //eat:function(){}
console.log('吃东西')
}
}
console.log(user)
2.数组解构赋值
数组解构:
1.1 取出数组的属性值 赋值给 变量
1.2 取出变量的值 赋值给 数组
// 1 取出数组的属性值 赋值给 变量
let arr=[1,2,3]
let [n1,n2,n3,n4]=arr
console.log(n1,n2,n3,n4) //1 2 3 undefined
// 2 取出变量的值 赋值给 数组
let num1=1
let num2=2
let num3=3
let arr1=[num1,num2,num3]
console.log(arr1)
3.函数参数解构赋值
// 函数参数是:对象
// 函数参数结构原理
// let obj={name:'李四',age:18}
// let {name,age}=obj
// 上面两行代码可以简写为一行
// let {name,age} = {name:'李四',age:18}
function fn({name,age}){ //let {name,age}={name:'张三',age:20}
// 对obj进行对象解构
console.log(name,age)
}
fn({name:'张三',age:20})
4.箭头函数
1.箭头函数:相当于function函数的简写(用在匿名函数中)
(1)把function改成箭头 =>
(2)把形参小括号()移到箭头的左边
// 1.基本用法
let fn = (a,b)=>{
return a+b
}
let res = fn(10,20)
console.log(res)
// 2.其他用法
// (1)如果箭头函数形参只有一个,形参的小括号()可以省略
let fn1 = a=>{
return a*2
}
let res1=fn1(66)
console.log(res1)
// (2)如果箭头函数的函数只有一行,则可以省略大括号(此时也必须省略return)
let fn2 = a=> a*2
let res2=fn2(88)
console.log(res2)
4.1 箭头函数的this指向
1. function函数this有三种指向
(1)普通函数:函数名() this->window
(2)构造函数:new 函数名() this->new创建的实例对象
(3)对象的方法:对象名.方法名() this->对象
2.箭头函数this:箭头函数没有this
本质是通过作用域链 访问上级this
3.以下几种函数不能是箭头函数
构造函数
call()无法修改箭头函数this
事件处理函数
let obj={
name:'lin',
eat(){//1级链 function函数this->Object
let fn1=function(){
// 2级链 fn1()中this->window
console.log(this)//window
}
fn1()
let fn2=()=>{
// 2级链 箭头函数this指向上一级 Object
console.log(this)//Obiect
}
fn2()
},
learn:()=>{//1级链 箭头函数this指向上一级 window
let fn1=function(){
// 2级链 fn1()中this->window
console.log(this)//window
}
fn1()
let fn2=()=>{
// 2级链 箭头函数this指向上一级 window
console.log(this)//window
}
fn2()
}
}
obj.eat()
obj.learn()
5.展开运算符
1.展开运算符:...
相当于对象遍历的一种简写
语法:...对象名
2.应用场景:
2.1 连接数组
2.2 求数组最大值
// 1.连接数组
let arr1=[10,20,30]
let arr2=[40,50,60]
// ES5
// arr1=arr1.concat(arr2)
// console.log(arr1)
// ES6
arr1.push(...arr2)
console.log(arr1)
// 2.求数组最大值
let arr=[11,22,44,88,99]
let max=Math.max(...arr)
console.log(max)
// 3.连接对象
let stu={
score:80,
className:'101'
}
let obj={
name:'lin',
age:18,
...stu
}
console.log(obj)
6.数据类型
1.数据类型Set:集合
类似于数组,与数组最大的区别是:集合不能存储重复元素
2.应用:数组去重
let arr=[20,45,20,55,60,45,78,60]
console.log(arr)
// 1.创建Set
let set=new Set(arr)
console.log(set)
// 2.Set转数组
let newArr=[...set]
// 上面步骤可以简写成一行(面试点,数组去重)
let arr1=[...Set(arr)]
7.数组map遍历
1.map方法作用:根据某种规则映射数组,得到映射之后的新数组
应用场景:(1)数组中所有元素 * 0.8 (2)将数组中的js对象映射成html字符串
2.map语法特点:
(1)回调执行次数 === 数组长度
(2)回调函数内部return
return 新元素
如果没有return,新元素是undefined
(3)方法自身的返回值:
映射后的新数组
let arr=[10,20,30,40]
// 完整语法
// let res=arr.map((item,index)=>{
// // console.log(item,index)
// return item*0.8
// })
// 熟练语法
let res=arr.map(item=>item*0.8)
console.log(res)
8.数组filter遍历
1.filter方法作用:根据条件,筛选数组
应用场景:(1)筛选数组中的偶数 (2)商品价格筛选
2.filter语法特点:
(1)回调执行次数 === 数组长度
(2)回调函数内部return
return true:满足条件 ,放入新数组
return false:不满足条件
如果没有return,新元素是undefined
(3)方法自身的返回值:
筛选之后的新数组
// 筛选数组中的偶数
let arr=[10,20,45,66,75,80]
// 标准写法
// let res=arr.filter((item,index)=>{
// if(item %2===0){
// return true
// }else{
// return false
// }
// })
// console.log(res)
// 简洁写法
let res=arr.filter(item=>item % 2 === 0)
console.log(res)
9.数组forEach遍历
1.forEach方法作用:相当于for循环另一种写法
应用场景:遍历数组
2.filter语法特点:
(1)回调执行次数 === 数组长度
(2)回调函数内部return
无
(3)方法自身的返回值:
无
/ 遍历数组
let arr=[10,20,45,66,75,80]
arr.forEach((item,index)=>{
console.log(item,index)
})
10.数组some遍历
1.some方法作用:判断 数组中是否有满足条件的元素(逻辑或 || 有任意一个满足即可)
应用场景:(1)判断数组中有没有奇数
(2)非空判断:判断表单数组中,有没有元素value为空
2.some语法特点:
(1)回调执行次数 !== 数组长度
(2)回调函数内部return
return true:循环结束。找到满足条件的元素,sam自身返回true
return false:循环继续,没有找到满足条件的,如果所有元素都是返回false,最终some默认返回false
(3)方法自身的返回值:
true:有满足条件的元素
false:没有满足条件的元素
// 判断数组中有没有奇数
let arr=[10,20,30,40,50]
// 标准写法
// let res=arr.some((item,index)=>{
// if(item%2===1){
// return true
// }else{
// return false
// }
// })
// 简写语法
let res=arr.some(item=>item%2===1)
console.log(res)
11.数组every遍历
1.every方法作用:判断 数组中是否所有元素都满足条件(逻辑与 && ,全部满足)
应用场景:(1)判断数组中是否所有元素都是偶数
(2)开关思想:购物车是否全选
2.every语法特点:
(1)回调执行次数 !== 数组长度
(2)回调函数内部return
return true:循环继续。满足条件,如果所有元素都满足,最终every返回true
return false:循环结束。不满足条件,此时every返回false
(3)方法自身的返回值:
true:所有元素都满足条件
false:有元素不满足条件
// 判断数组中所有元素都是偶数
let arr=[10,20,30,40,50]
// 标准写法
// let res=arr.every((item,index)=>{
// if(item%2===0){
// return true
// }else{
// return false
// }
// })
// 简写语法
let res=arr.every(item=>item%2===0)
console.log(res)
12.数组findIndex遍历
1.findIndex方法作用:找元素下标
应用场景:(1)如果数组中是值类型,找元素下标,用arr.indexOf(元素)
(2)如果数组中是引用类型,找元素下标,用arr.finedIndex(元素)
2.findIndex语法特点:
(1)回调执行次数 !== 数组长度
(2)回调函数内部return
return true:循环结束。找到元素,返回当前元素下标
return false:循环继续。没有找到,如果全部都是false,最终返回固定值-1
(3)方法自身的返回值:
-1:没有元素
下标:有元素
let arr=[
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:30}
]
// 简洁写法
let res=arr.findIndex(item=>item.name==='李四')
console.log(res)
13.数组reduce遍历
1.数组reduce遍历:为每一个元素执行一次回调,返回最后一个回调的结果
2.reduce场景:求数组累加和
第一个参数:回调函数(sum,item,index)=>{}
sum:上一次回调return返回值
item:当前元素
index:当前下标
第二个参数:sum初始值 ,一般给0,如果不给,遇到空数组,reduce就会报错
// 标准写法
// let res=arr.reduce((sum,item,index)=>{
// console.log(sum,item,index)
// return sum+item
// },0)
// 简写语法
let res = arr.reduce( (sum,value)=>sum+value , 0 )
console.log( res )