let和const
var关键字定义变量的特点:
- 可以重复定义
- 不能定义常量
- 不支持块级作用域
let的特点
- 不可以重复定义
- 变量不能提升,在变量定义之前,不能使用
- 在大括号当中定义的变量(块级作用域中),在作用域外无法访问
- 解决一些ES5当中需要闭包实现的功能,比如:每隔1秒循环输出一个当前的值
const的特点
- 常量一旦定义,就不能被修改
- 如果常量的值是一个引用类型,引用对象的属性还是可以修改的
结构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为结构。
let arr = [1,2,3];let [a,b,c] = arr;let [,,m] = arr;// m = 3let [d,...e] = arr;// d = 1// e = [2,3]let [f,g,...h] = [1];// f = 1// g = undefined// h = []let obj = { name:"mmcai", age:28, long:165}let {name,age,long} = obj;// name = "mmcai"// age = 28// long = 165let {name:myName,age:myAge} = obj;// myName = "mmcai"// myAge = 28let {name,...O} = obj;// name = "mmcai"// O = { age:28, long:165}
特点
- 可以通过“模式匹配”的写法从数组或者对象中取出来值,直接赋值给某变量
- 不完全解构,等号左边的模式,只匹配右边的一部分
- 解构赋值可以指定默认值,如果从等号右边取出来的值是undefined,就会使用指定的默认值
- 数组的解构赋值要完全按照数组的秩序取值,对象不需要
- 如果解构赋值等号右边是布尔或者数值,会先转为对象
- 字符串也可以执行结构赋值,字符串结构赋值的时候,被当做类数组的对象
- 函数的参数也可以使用解构默认赋值,往往还会设置默认值,当参数没有的时候,直接使用默认值
以下三种解构赋值不能使用圆括号
- 变量生命语句
- 函数参数
- 赋值语句的模式
用途
- 交换变量的值
- 从函数返回多个值
- 函数参数的定义
- 提取JSON数据
- 函数参数的默认值
- 遍历Map结构
- 输入模块的指定方法
字符串扩展
- 字符的Unicode表示法
- 使用for...of循环遍历字符串,ES6字符串添加了遍历器接口Iterator
- 模板字符串,ES6自带模板解析引擎
- 模板字符串可以直接跟在函数名后面,该函数将被调用来处理这个模板字符串
模板字符串
ES6当中字符串使用反引号(`)标识,字符串当中嵌入变量可以通过${}来添加,比如:
const {name,age} = { name:"mmcai", age:28}const str = `我的名字是${name},我今年${age}岁了`;
其实模板字符串,就是ES6本身自带了一个模板引擎,来对特殊的内容进行解析,大概原理如下:
let compile = (desc){ return desc.replace(/\$\{([^}]+)\}/g,(matched,key)=>{ return eval(key); }}
- 模板字符串使用`标识,使用${}包括嵌入的变量
- 模板字符串可以换行
- 当我们需要自定义模板引擎的时候,可以使用标签模板,通过函数来实现
字符串新增方法
- includes——判断字符串中是否包含某字符串,返回布尔值
- startsWith——字符串头部是否有某字符串,返回布尔值
- endsWith——字符串结尾是否有某字符串,返回布尔值
- repeat——返回一个重复了n次的新字符串。
- trimStart——消除字符串头部空格
- trimEnd——消除尾部空格
- padStart——从头部补全字符串
- padEnd——从尾部补全字符串