目录
Var特点
<script>
// 预解析 js代码从上玩下解析之前,会对变量声明进行提升,(预解析)
// 2. 没有块级作用域 if 和for 语句的大括号声明的变量也是局部的
// 2.1 没有块级.if 和for大括号声明的变量不是局部的,是全局的
console.log(num)
var num = 1
console.log(num)
for(var i=1 ;i<= 5 ;i++){
console.log(`循环内`);
}
</script>
lat与const的特点
/**1.ES5中声明变量var关键字的特点
1.1 预解析:变量声明提升
1.2 没有块级作用域:if和for大括号里面声明的变量也是全局的
2.ES6中声明let与const特点:
1.1么有预解析:变量必须先声明,才能使用
1.2块级作用域:if和for大括号里面的变量是局部的
3.let与const区别:
3.1 let: 变量.可以修改变量中的数据
3.2 const:常量.只能声明的时候赋值一次,不可以修改
*/
解构对象
/**
* 解构赋值 : 变量赋值简写语法
* 1重点掌握
* 1.1 取出对象的属性 赋值给变量
* 1.2 取出变量的值 赋值给 对象的属性
*/
// 1.取出对象的属性 赋值给变量
// let obj = {
// name: '聪明蛋',
// age: 22,
// gender: '女'
// }
// ES5
// let name = obj.name
// let age = obj.age
//let gender = obj.gender
//
// ES6 简写形式 可以直接省略
// let {
// name, //name :'聪明蛋' 简写形式
// age,
// gender,
// hobby
// // let hobby = obj.hobby
// } = obj
// console.log(name, age, gender, hobby)
//2. 取出变量的值 赋值给对象的属性
let name = '聪明蛋'
let age = 18
let gender = '女'
// ES6写法
let obj = {
name, //等同于ES5写法中的 name:name 简写
age,
gender,
eat() { //等价于ES5中的eat:function(){} 简写
console.log('吃东西')
}
}
console.log(obj)
函数的参数解构
<script>
/**
* 解构赋值 : 变量赋值简写语法
* 1重点掌握
* 1.1 取出对象的属性 赋值给变量
* let {name,age,sex} = 对向名
* 1.2 取出变量的值 赋值给 对象的属性
*/
function fn({uname,pword}) { //{ uname,pword} = {uname:'聪明蛋',pword:'123456'}
console.log(uname,pword)
}
fn({
uname: '聪明蛋',
pword: '123456'
})
</script>
箭头函数
<script>
/**
* 1. 箭头函数的语法:就是function的简写
1.1 把function单词替换成 箭头 =>
1.2 把形参()移动到 箭头的 左边
* 2.箭头函数的其他用法:
2,1 如果只有一个形参,则可以省略形参小括号
a=>(return a*2)
2.2 如果函数体只有一行 ,则可以省略大括号,此时必须要省略return
a=>a*2
* 3.箭头函数this指向:箭头函数没有this
箭头函数中使用this,会访问上级作用域this
愿意:箭头函数没有this,就往上级作用域找
*/
// 1.箭头函数
let fn = () => {} // === let fn = function(){} ES6简写形式
// 2.如果只有一个形参 那么可以省略形参的小括号()
let fn1 = a => {
return a * 12
}
let res1 = fn1(20)
console.log(res1)
//3.如果函数体只有一行 那么可以省略大括号{}
let fn2 = a => a * 22
let res2 = fn2(123)
console.log(res2)
let obj = {
eat: function () {
let fn1 = function () {
console.log(this)
}
fn1()
let fn2 = () => {
console.log(this)
}
fn2()
},
learn: () => {
let fn1 = function () {
console.log(this)
}
fn1()
let fn2 = () => {
console.log(this)
}
fn2()
}
}
console.log(obj)
obj.eat()
obj.learn()
</script>
展开运算符
<script>
/**
* 1.展开运算符 :...
* 2.作用 相当于遍历数组
* 3.应用场景:
3.1 连接数组(上拉加载下一页) : arr1.push(...arr2)
3.2 求数组最大值 : Math.max(..arr)
*/
// 1.连接数组 :页面加载下一页的时候,就需要连接数组
let arr1 = [10, 20, 30, 40]
let arr2 = [20, 30, 40, 50]
//ES5:arr.push.apply(arr1,arr2)
1
// ES6 arr1.push(...arr2)
arr1.push(...arr2)
console.log(arr1)
//2,求数组的最大值
let arr = [10, 20, 30, 324, 234, 453, 645, 677, 56, 7567, 567567, 567, 5675671, ]
// ES5.Math.max.apply(Math,arr)
// ES6.Math.max(...arr)
let max = Math.max(...arr)
console.log(max)
</script>
数据类型Set
<script>
let arr = [123, 12, 32, 423, 534, 545, 756, 23, 5, 3, 678, 567, 23, 4346, 45, 679, 123, 12, 423, 5, 346, 4, 745623,
4, 23, 534, 673, 5, 2135, 34, 756, 34637, 56, 856, 789, 35345, 3, 645, 7, 568, 67, 45, 345, 3453456, 856, 5453,
4
]
let newArr = Array.from(new Set(arr))
console.log(newArr)
</script>
数组map遍历
<script>
/*
1.map场景:映射数组.对数组每一个元素进行映射处理,得到一个全新数组
映射关系: 每一个元素 *0.8
映射关系: 每一个元素*2
2.map方法特点
(1)回调执行次数 === 数组长度
(2)本身返回值: 映射之后的新数组
(3)回调函数内部return
return 新数组元素值
如果不写return, 新数组的每一个元素都会变成undefined
*/
let arr = [10, 423, 3456, 6, 234, 111]
let newArr = arr.map((value, index) /*元素,下标*/ => {
return value * 2 * 0.8
})
console.log(newArr)
</script>
数组filter遍历
<script>
/*
1.filter场景: 筛选数组
举例:找出数组中符合条件的元素
找到数组中所有的偶数
找到对象数组中符合条件的元素
2.filter方法特点
(1)回调执行次数 === 数组长度
(2)本身返回值: 映射之后的新数组
(3)回调函数内部return
return 新数组元素值
return true:满足筛选条件,当前元素放入新数组中
return false:不满足筛选条件,当前元素放入新数组中
*/
let arr = [12, 312, 3, 123, 12, 3, 123, 12, 4, 23, 53, 46, 45, 87, 67, 978, 90, 780, 89089, 56, 45]
let src = arr.filter(value => value % 2 == 0)
let src1 = arr.filter((value, index) => {
if (value % 2 == 0) {
return true
} else {
return false
}
})
console.log(src)
let arr1 = [{
name: 'Gtx960',
price: 1500
},
{
name: 'Rtx2060',
price: 4000
},
{
name: 'Rtx3060',
price: 2499
},
{
name: 'Rtx3060Ti',
price: 2999
},
{
name: 'Rtx3070',
price: 4999
},
{
name: 'Rtx3070Ti',
price: 5999
},
{
name: 'Rtx3080',
price: 7999
},
{
name: 'Rtx3080Ti',
price: 8500
},
{
name: 'Rtx3090',
price: 9999
},
{
name: 'Rtx3090Ti',
price: 11999
}
]
let res2 = arr1.filter(value => value.price > 4000 && value.price < 10000)
console.log(res2)
</script>
数组forEach遍历
<script>
/*
1.function场景:遍历数组
2.forEach 方法特点
(1)遍历次数 === 数组长度
(2)本身返回值
无
(3)回调函数内部return
无
*/
let arr = [12, 312, 3, 123, 12, 3, 123, 12, 4, 23, 53, 46, 45, 87, 67, 978, 90, 780, 89089, 56, 45]
let crs = arr.forEach(value => {
console.log(value)
})
</script>
数组some遍历
<script>
/*
1. some场景:判断数组中是否有满足条件的元素
例子:判断数组中有没有负数
2.some方法特点
(1)回调执行次数 != 数组长度
(2)本身返回值
true:有满足条件的尿素
false:没有满足的条件
(3)回调函数内部return
true:循环立即结束.并且some方法本身返回true
false:循环继续执行.如果全部遍历结束还是false,则some方法默认返回false
*/
let arr = [1, 23, 123, 12, 321, 3, 123, 1, 4, 234, 3, 56, 3467, 45]
let res = arr.some(value => value < 0)
console.log(res)
</script>
数组every遍历
<script>
/**1.every场景:判断数组中是否所有元素都满足条件
经典场景:开关法
2.every方法特点
(1)遍历次数 ! = 数组长度
(2)本身返回值
true:全部满足条件
false:有元素不满足条件
(3)回调函数内部return
true:循环继续.如果全部遍历结束还是true,则every方法默认返回就是true
false:循环结束.并且every方法本身返回值是false
*/
let arr = [123, 235, 345677, 567, 234, 1235, 56489234, 345897345]
let res = arr.every(value => value >= 2222)
console.log(res)
</script>
数组findIndex方法
<script>
/*
1.findIndex场景: 获取某个元素下标
应用场景:与 indexOf()类似.但是findIndex一般用于对象数组
2.findIndex方法特点
(1)遍历次数 != 数组长度
(2)本身返回值
有元素:元素下标
没有元素:固定值-1
(3)回调函数内部return
return true : 找到了,循环立即结束.并且findIndex方法本身返回当前index
return false: 没找到,循环继续. 如果全部遍历完成还是没有找到 则得到返回值-1
*/
let arr1 = [{
name: 'Gtx960',
price: 1500
},
{
name: 'Rtx2060',
price: 4000
},
{
name: 'Rtx3060',
price: 2499
},
{
name: 'Rtx3060Ti',
price: 2999
},
{
name: 'Rtx3070',
price: 4999
},
{
name: 'Rtx3070Ti',
price: 5999
},
{
name: 'Rtx3080',
price: 7999
},
{
name: 'Rtx3080Ti',
price: 8500
},
{
name: 'Rtx3090',
price: 9999
},
{
name: 'Rtx3090Ti',
price: 11999
}
]
let res = arr1.findIndex(value => value.name == 'Rtx3090Ti')
console.log(res)
</script>
reduce方法
<script>
/*
1.数组reduce方法: 给每一个元素执行一次回调
2.应用场景:数组求和,求数组最大值
3.语法:
let res = arr.reduce((sum,value,index)=>{return sum+value},0)
*res返回值是最后一次sum的结果
4.注意点: 一定要给初始值,否则reduce遇到空数组就会报错
*/
let arr = [123, 324, 5435, 4654, 7, 32423534, 23423, 423, 5346, 34636]
let sum = arr.reduce((sum, value) => sum + value, 0)
console.log(sum)
/**
* @description:
* @param {callbackfn}回调函数
(sum,value,index)=>{sum:上一次的返回值 value:当前元素值 index:当前下标}
sum初始值: 一般给0,否则空数组reduce报错
* @return: 最后一次回调的结果
*/
let max = arr.reduce((max, value) => max > value ? max : value, 0)
console.log(max)
</script>