let与const
let:块作用域、无法重复使用
var:全局作用域
const:常量,无法修改,声明的时候必须赋值,对象指针不变,但是对象内容可以变
解构赋值
左边一种结构,右边一种结构,左右一一对应
解构赋值分类
- 数组解构赋值
{
let a,b,rest
[a,b] = [1,2]
console.log(a,b) //输出结果:1 2
}
{
let a,b,rest
[a,b,...rest] = [1,2,3,4,5,6]
console.log(a,b,rest) //输出结果1 2 [3,4,5,6]
}
{
let a,b,c,rest
[a,b,c=3] = [1,2]
console.log(a,b,c) //输出结果:1 2 3
}
{
let a,b,c,rest
[a,b,c] = [1,2]
console.log(a,b,c) //输出结果:1 2 underfind 左右不配对
}
数组解构赋值适用于变量替换、索引替换
例子
{
let a=1;
let b=2;
[a,b]=[b,a]
console.log(a,b) //输出结果:2 1
}
{
function f(){
return [1,2]
}
let a,b;
[a,b]=f()
console.log(a,b) //输出结果:1 2
}
{
function f(){
return [1,2,3,4,5,6]
}
let a,b,c;
[a,,,b]=f()
console.log(a,b) //输出结果:1 4
}
- 对象解构赋值
{
let a,b
({a,b}={a:1,b:2})
console.log(a,b) //输出结果:1 2
}
对象解构赋值适用于
例子
{
let o={p:43,q:true}
let {p,q}=o
console.log(p,q) //输出结果:43 true
}
{
let {a=10,b=5}={a:3}
console.log(a,b) //输出结果:3 5
}
{
let meta = {
title: 'abc',
test:[{
title:'test',
desc: 'description'
}]
}
let {title:esTitle,test:[{title:cnTitle}]}=meta
console.log(esTitle,cnTitle) //输出结果:abc test
}
- 字符串解构赋值
- 布尔值解构赋值
- 函数参数解构赋值
- 数值解构赋值
正则扩展
//es5写法:
{
let regex1 = new RegExp('xyz','i');
let regex2 = new RegExp(/xyz/i); //只能是一个参数
console.log(regex1.test('xyz123'),regex2.test('xyz123')) //输出结果:true,true
}
//es6写法
{
let regex3 = new RegExp(/xyz/ig,'i'); //可以有两个参数
console.log(regex3.flags) //输出结果:i
}
//es6第一个元素可以是正则表达式,第二个是元素修饰符,但是元素修饰符会覆盖正则表达式
{
let s='bbb_bb_b';
let a1 = /b+/g;
let a2 = /b+/y;
console.log('one', a1.exec(s),a2.exec(s)); //输出结果:bbb bbb
console.log('two', a1.exec(s),a2.exec(s)); //输出结果:bbb null
console.log(a1.sticky,a2.sticky) //输出结果:false true 是否开启了y匹配
}
//第一步匹配的就是bbb
//都是全局匹配 g匹配从上一次匹配的位置继续寻找,直到找到下一个匹配值 y匹配必须是下一个值匹配成功
{
console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A')) //输出结果:true当成两个字节
console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A')) //输出结果:false当成一个字节
console.log(/\u{61}/u.test('a')) //输出结果:true
console.log(/\u{61}/.test('a')) //输出结果:false
console.log(`\u{20BB7}`)
let s='��'
console.log('u',/^.$/.test(s)); //输出结果:false
console.log('u',/^.$/u.test(s)); //输出结果:true
console.log('test',/��{2}/.test('����')) //输出结果:false
console.log('test',/��{2}/u.test('����')) //输出结果:true
//如果字符串中大于两个字节,只能用u匹配
}