let和const

var关键字定义变量的特点:

  • 可以重复定义
  • 不能定义常量
  • 不支持块级作用域

let的特点

  1. 不可以重复定义
  2. 变量不能提升,在变量定义之前,不能使用
  3. 在大括号当中定义的变量(块级作用域中),在作用域外无法访问
  4. 解决一些ES5当中需要闭包实现的功能,比如:每隔1秒循环输出一个当前的值

const的特点

  1. 常量一旦定义,就不能被修改
  2. 如果常量的值是一个引用类型,引用对象的属性还是可以修改的

结构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为结构。

let arr = [1,2,3];
let [a,b,c] = arr;

let [,,m] = arr;
// m = 3

let [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 = 165

let {name:myName,age:myAge} = obj;
// myName = "mmcai"
// myAge = 28

let {name,...O} = obj;

// name = "mmcai"
// O = {
    age:28,
    long:165
}

特点

  1. 可以通过“模式匹配”的写法从数组或者对象中取出来值,直接赋值给某变量
  2. 不完全解构,等号左边的模式,只匹配右边的一部分
  3. 解构赋值可以指定默认值,如果从等号右边取出来的值是undefined,就会使用指定的默认值
  4. 数组的解构赋值要完全按照数组的秩序取值,对象不需要
  5. 如果解构赋值等号右边是布尔或者数值,会先转为对象
  6. 字符串也可以执行结构赋值,字符串结构赋值的时候,被当做类数组的对象
  7. 函数的参数也可以使用解构默认赋值,往往还会设置默认值,当参数没有的时候,直接使用默认值
  8. 以下三种解构赋值不能使用圆括号

    1. 变量生命语句
    2. 函数参数
    3. 赋值语句的模式

用途

  • 交换变量的值
  • 从函数返回多个值
  • 函数参数的定义
  • 提取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);
    }
}
  • 模板字符串使用`标识,使用${}包括嵌入的变量
  • 模板字符串可以换行
  • 当我们需要自定义模板引擎的时候,可以使用标签模板,通过函数来实现

字符串新增方法

  1. includes——判断字符串中是否包含某字符串,返回布尔值
  2. startsWith——字符串头部是否有某字符串,返回布尔值
  3. endsWith——字符串结尾是否有某字符串,返回布尔值
  4. repeat——返回一个重复了n次的新字符串。
  5. trimStart——消除字符串头部空格
  6. trimEnd——消除尾部空格
  7. padStart——从头部补全字符串
  8. padEnd——从尾部补全字符串

mmcai
126 声望10 粉丝

勿忘初心,方得始终