一. let 和 const 命令
let声明变量属于局部变量,只在代码块中有效
用法:
1.先定义,后使用
2.不能重复定义变量
3.存在暂时性死区,没有预编译,不存在变量提升
** 4.for循环里面是父级作用域,let声明的变量是局部变量,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量 **
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
const
1.定义常量、声明匿名函数、箭头函数。 只声明不赋值,就会报错
2.命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用
3.只在声明所在的块级作用域内有效
** 二.变量的解构赋值**
1.数组解构赋值 :
let [a,b,c]=[1,2,3]
2.对象解构赋值:
const state = {
name: '张三',
job: 'worker'
};
let {name,job} = state;
3.字符串解构赋值:
let [a,b,...c]='hello' //c:['l','l','o']
4.数值和布尔值解构赋值
let {toString: s} = 123;
//s:function toString() { [native code] }
5.函数参数解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]); // 3
模式匹配:只要等号两边的模式相同,左边的变量就会被赋予对应的值
let [foo, [[bar], baz]] = [1, [[2], 3]];
不完全解构:即等号左边的模式,只匹配一部分的等号右边的数组
let [x, y] = [1, 2, 3] x // 1 y // 2
解构不成功,变量的值就等于undefined。
let [bar, foo] = [1]; //bar :1 foo:undefined
指定默认值
let [foo = true] = []; foo // true
三.字符串的新增方法
字符串模板 ${变量}
字符串查找 :
str.indexOf(要找的东西) //索引下标 /-1
str.inclueds(要找的东西) //true/false
str.startsWith(...) 字符串是否以。。。开头//true/false
str.endsWith(...) 字符串是否以。。。结尾//true/false
str.repeat(。。) 重复字符串。。次数
字符串补全长度的功能:
str.padStart(填充的长度,内容) 往前填充
str.padEnd() 往后填充
消除空格:
str.trimStart() == str.trimLeft() //消除前面空格
str.trimEnd() == str.trimRight() //消除后面空格
str.trim() //消除两头空格
四.数值扩展
Number.isFinite(..) //用来判断是否是数值
Number.isNaN(..) //用来判断是否为NaN
Number.parseInt() //取整
Number.parseFloat() //保留小数
Number.isInteger() 用来判断一个数值是否为整数.整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值
2**3 //8 指数运算符
五.函数的扩展
函数默认参数
function show({a='hello',b='world'}={}){
// 函数参数默认已经定义了,不能再使用let,const声明
console.log(a,b) //hello,world
}
show()
扩展运算符、reset运算符 ...
let arr=['apple','branan','orange']
console.log(...arr) //数组转成字符串
let copy=[1,2,3,4]
let copy2=[...copy] //拷贝数组
let copy3=Array.from(copy) //拷贝
console.log(copy,copy2,copy3)
箭头函数 :
注意点:
** 1.this问题,定义函数所在的对象,不在是运行时所在的对象**
2.箭头函数里没有arguments,用'...'
3.箭头函数不能当构造函数使用