ES6 系列
1.let 和 const 的區別
let 和 const 都是塊級作用域且在當前作用域有效不能重複聲明
1.1 let 命令
- 不存在变量提升
- 不允许重复声明
{
let a = 1;
let b = 2;
}
1.2const 命令
const 只能声明一个只读的常量,声明一个变量后无法修改,且不能再用 let 声明
const PI = 3.14;
2.变量的解构赋值
2.1 数组
//以前
let a = 1;
let b = 2;
//es6
let [a,b] = [1,2];
let [a,b,...c] = [1]
console.log(a,b,c) //1 undefined [] 如果结构不成功就是undefined
//如果两边模式不相等会报错
let [a] = 1;
let [a] = false;
let [a] = NaN;
let [a] = {}
//使用默认值
let [a=1] = [] //a=1
let [a=1] = [undefined] a =1 默认值不起作用
let [a = 1] = [null] a = null
2.2 对象
与数组的解构不同,对象解构不需要严格按照顺序取值,而按照变量名去取对应的属性名若娶不到则为 undefined.
let {a,b} = {a: 1,b: 2} // a = 1 b =2
let {a} = {b: 1,c: 2} //a undefined
//指定解构默认值
let { a = 1} = {}
let {a,b=1} = {a: 2}
2.3 字符串的解构
const [a,b,c,d,e] = 'hello';
2.4 数值和布尔值的解构赋值
解构赋值的规则市,只要等号右边的值不是对象或数组,就先将其转化为对象。由于 undefiend 和 null 无法转化为对象,对他们解构会报错。
let {toString: s} = 123
s ===Number.prototype.toString
2.5 函数参数的解构赋值
function fn([a,b]) {
}
fn([1,2])
function fn({a=0,b=1}) {
return a+b;
}
fn({a: 3,b: 4})
2.6 应用
//交换
let a= 1,b =2;
[a,b] = [b,a]
//函数
function fn() {
return {a: 1,b: 2}
}
let {a,b} = fn()
//json
let json = {name: 'jack',age: 20}
let {name,age} = json;
//遍历map结构
const m = new Map();
m.set('a',1)
m.set('b',2)
for(let [k,v] of m) {
console.log(k+'-'+v)
}
//获取模块
const {log,sin,cos} = require('math');
3.字符串拓展
3.1 includes(),startsWith(),endsWith()
在判断字符串是否包含另一个字符串时 Es6 之前用 typeof Es6 后又多了三种方法
- includes() 返回布尔值 是否找到
- startsWith() 返回布尔值 是否在头部
- endsWith() 返回布尔值 是否在尾部
let a = 'hello jack'
a.includes('jack') //true
a.startsWith('jack') //false
a.startsWith('hello')//true
a.endsWith('jack')//true
3.2repeat()
返回某个字符串 n 次
let a = 'ab'
a.repeat(3) //ababab
3.3padStart(),padEnd()
用于将字符串头部或尾部补全长度, padStart()为头部补全, padEnd()为尾部补全。 这两个方法接收 2 个参数,第一个指定字符串最小长度,第二个用于补全的字符串。
//基础用法
let a = 'x';
a.padStart(5,'ab') //'ababx'
a.padEnd(5,'ab') //'xabab'
let a = 'abxxxab'
a.padStart(5,'dd') // 'abxdd' //截取多余的在补上
a.padStart(4) //' a' 如不不指定就用空格代替
3.4 字符串拼接
let x = 'dddd'
let a = `a b c d ${x}`
4.正则拓展
- 参数是字符串 new RegExp('abc','i') 或 let a = /abc/i
- 参数是正则表达式 new RegExp(/abc/i)
let a = new RegExp('abc','i')
//等价于
let a = /abc/i
4.1 字符串的正则方法
match()、replace()、search()、split()