let
- let 允许声明一个在作用域限制在块级中的变量、语句或者表达式
理解块级作用域
let b
if(true){
let a = 1
b = 2
console.log(a)
}
console.log(b)
console.log(a)
理解块级作用域-for语句
for(let i = 0; i < 5; i++ ){
setTimeout(function(){
console.log(i);
},100);
}
console.log(i)
理解块级作用域-for语句
let i;
for(i = 0; i < 5; i++ ){
setTimeout(function(){
console.log(i);
},100);
}
console.log(i)
理解块级作用域-for语句
console.log(i)
for(var i = 0; i < 5; i++ ){
(function(i){
setTimeout(function(){
console.log(i);
},100);
})(i);
}
console.log(i)
let和var的区别
情况一:var会预解析变量
console.log(a)
var a = 1
情况二:let 不会被预解析必须先声明后使用
console.log(a)
let a = 1
情况三:var可以重复声明变量
var a = 1
var a = 2
console.log(a) //2
情况四:let 不能重复声明
let a = 10
let a = 20
const
情况一:常量只能在声明时赋值,并且一旦赋值不能修改
const b;
解构赋值
对象解构赋值:变量名和属性名要对应
let obj = {
a: 1,
b: 2,
c: 3
}
let {a,c} = obj
console.log(a,c)
let {d} = obj
console.log(d)
数组解构赋值:变量名和值索引对应
let arr = [1,2,3]
let [a,b,c] = arr
console.log(a,b,c)
字符串解构赋值:变量名和值索引对应(可迭代)
let str = "ABCD"
let [a,b] = str
console.log(a,b)
展开运算符
let arr = [1,2,3,[4,5]]
let arr2 = ["a",...arr,"b","c"]
console.log(arr2)

需求一:数组扁平化
方法一:
console.log(arr2.flat(Infinity));

需求一:数组扁平化
方法二:
function flatten(arr){
var result=[]
arr.forEach(function(item){
if(Array.isArray(item)){
result=result.concat(flatten(item))
}else{
result.push(item)
}
})
return result;
}
需求一:数组扁平化
方法三:
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat(...arr)
}
return arr
}
需求一:数组扁平化
方法四:
function flatten(a=[]){
return a.reduce(function(prev,cur){
return prev.concat(Array.isArray(cur)?flatten(cur):cur)
},[])
}
var a=[1,2,[3,4]]
var b=[5,6]
console.log(b.concat(...a))
//[5, 6, 1, 2, 3, 4]
// 展开运算符
let obj = {
a: 1,
b: 2
}
let obj2 = {
...obj,
c: 3,
d: 4
}
console.log(obj2)
// 剩余参数
let {a,...d} = obj2
console.log(a,d)
let obj3={...obj} //新对象中 互不影响
obj3.a=3
console.log(obj,obj3)

set
确定性、无异性、无序性
size 数据长度
Set.add(val).add(val)
Set.delete(val)
Set.has(val)
Set.clear()
let arr = [1,2,3,4,1,3,5,2]
let data = new Set(arr)
console.log(data)
console.log([...data])
console.log(data.add("a").add("b"))
console.log(data.delete("b"))
console.log(data.has(2))
console.log(data.size,data)

map
size 数据长度
Map.set(key,value) 添加子项 返回 set 数据本身
Map.delete(key) 删除子项 数据的key值 返回 true | false
Map.has() 是否包含子项
Map.get(key) key对应的具体的value
let data = new Map([[1,40],['who','lth'],["true",false],[true,false]]);
data.set("name",'lth');
data.delete(1);
console.log(data.get("true"));
console.log(data);

箭头函数
箭头函数没有不定参数,但可以用rest参数
let fn = (a,...arg)=>{
console.log(a,arg);
};
fn(1,2,3,4);
箭头函数的this指向箭头函数定义时所在的作用域的this
document.onclick = function(){
let fn = (a,...arg)=>{
console.log(this);
};
fn();
};

Array.from()
Array.from(ArrayLikes[,likeMapFunc,this])的返回值是转换成的新数组
它可以把一个具备下标还有length的类数组转换为真正的数组类数组
Array.of()
转换为数组
let arr = Array.of(1,2,3,4,5,5,6)
console.log(arr)

find
let arr = [1,2,5,6]
let val = arr.find((item)=>{
return item >= 5
})
console.log(val)
我想获得的格式是什么?
//是对象格式?
let arr = [{who:'lth'},{who:"lwl"}]
let val = arr.find((item)=>{
return item.who === 'lth'
})
console.log(val)
//是数组格式?
let val1=arr.filter((item=>{
return item.who === 'lth'
}))
console.log(val1)

findIndex
let arr = [1,2,5,6]
let index = arr.findIndex((item)=>{
return item >= 5
})
console.log(index)
flatMap
let arr = [
[1,2],
[3,4],
[6,8]
]
let arr2 = arr.flatMap(item=>{
item = item.filter(item=>item>=2)
return item
})
console.log(arr2)

includes
let arr = ["a","b","c","d"]
console.log(arr.includes("a",-4))
fill
arr.fill(value[, start[, end]]); 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
let arr = ["a","b","c","d","e"];
arr.fill("f",1,3);
console.log(arr); //["a", "f", "f", "d", "e"]
字符串方法
let str = "123456789"
console.log(str.startsWith("56",4))
console.log(str.endsWith("67",7))
let str2 = "1"
console.log(str.repeat(3))
对象合并
let obj = {
a: 1,
b: 2
}
let obj2 = {
c: 3,
d: 4
}
let f = null
let obj3 = Object.assign({},obj,obj2,{f})
console.log(obj3)

Object.is()
Object.is 判断两个值是否是相同的值,使用的是强类型转换===
console.log(Object.is(NaN,NaN));
console.log(Object.is(+0,-0));
console.log(+0 === -0 )
console.log(NaN === NaN )
属性名表达式
let n = "name"
let obj = {
[n]: "leo"
}
console.log(obj)
