var let const 区别
图1,分别显示 a输出10,b输出 b is not defined,c输出Assignment to constant variable(变量无法复制)。var就相当于一个全局定义,let相当于一个局部定义,而const相当于一个常量
图2 a会输出undefined ,局部先用局部定义,var a=2相当于我在注释的地方先定义了一个var a
图3 a会输出 Cannot access 'a' before initialization 在用域中可以理解成{}中如果使用定义的值在作用域中有都是优先使用作用域中的
图4 使用var可以重复定义,a会输出2,而let不可以重复定义,b会报错Identifier 'b' has already been declared不可以重复定义
图5 i会输出三次aa,其实()也是作用域中,j只会输出一次aa
图6 const与let 类似区别主要在于无法赋值,但是使用push之类数组或者对象,如果不能修改可以使用Object.freeze
图7 在循环中使用定时器,var会先打印aa,后打印5次5,而let会先打印bb后打印0,1,2,3,4
数组解构赋值
let [a,b,c]=[1,2,3]
console.log(a,b,c) //输入1 2 3
JSON解构赋值
let josn={
name:'a',
age:10,
job:'b'
}
let {name,age,job}=josn
console.log(name,age,job)// 输出a 10 b
let {name,age,job:d}=josn
别名
console.log(name,age,d)// 输出a 10 b
数组给默认值
let [a,b,c='无数据']=['aa','bb']
console.log(a,b,c) //输出aa bb 无数据
let [a,b,c='无数据']=['aa','bb',undefined]
console.log(a,b,c) //输出aa bb 无数据
let [a,b,c='无数据']=['aa','bb',null]
console.log(a,b,c) //输出aa bb null
JSON给默认值
let {a,b}={a:'aa',b:'bb'}
console.log(a,b) //输出 aa bb
let a;
{a}={a:'aa',b:'bb'}
console.log(a) //报错作用域
解决方式加一层括号
({a}={a:'aa',b:'bb'})
交换
let a=1;
let b=2;
[a,b]=[b,a]
console.log(a,b)//输出2 1
function aa({a,b='无'}){
console.log(a,b)
}
aa({
a:1
})
//输出1 "无"
字符串模板
let a='a'
let b='b'
let str='第一个'+a+'第二个'+b
console.log(str) //输出第一个a第二个b
let str=`第一个${a}第二个人${b}`
console.log(str)//输出第一个a第二个b
字符串数组查找
includes使用
let aa=[1,2,3]
console.log(aa.includes(1))//输出true
let aa='aa bb cc'
console.log(aa.includes('aa'))//输出true
console.log(aa.includes('a'))//输出true只会找回有没有
indexOf使用
let aa=[1,2,3]
console.log(aa.indexOf(1))//输出0
let aa='aa bb cc'
console.log(aa.indexOf('a'))//输出0返回下标位置
console.log(aa.indexOf('s'))//没有找到返回-1
endsWith 已什么结尾有返回true 没有返回false
let str='abc.png'
console.log(str.endsWith('png')) //输出true
startsWith 已什么开始有返回true 没有返回false
let str='abc.png'
console.log(str.startsWith('abc')) //输出true
repeat重复多少次
let str ='aa'
console.log(str.repeat(20))//输出20个aa
padStart 从前往后字符串填充
console.log('a'.padStart(2,'b')) //输出ba 2为a与b总长度b为填充的东西
padEnd 从后往前