ES6新特性及使用注意点

  • 全称ECMAScript,于2015年6月正式发布的JavaScript语言的标准,它得目标使得javascript可以用来编写复杂的大型应用程序,成为企业级开发语言
  • let和const
  • let
  • const
  • 解构赋值
  • 数组的解构
  • 对象模型的解构
  • Symbol
  • Map和Set
  • Map
  • Set
  • Reflect和Proxy
  • Reflect
  • proxy
  • ES6字符串
  • 字符串识别
  • 字符串重复
  • 字符串补全
  • 模板字符串
  • 标签模板
  • ES6数值
  • 方法
  • Math对象的扩展
  • 对象字面量
  • 数组
  • 函数
  • 默认参数
  • 不定参数
  • 箭头函数
  • 模块
  • import
  • export default 命令
  • Generator函数
  • async/await


全称ECMAScript,于2015年6月正式发布的JavaScript语言的标准,它得目标使得javascript可以用来编写复杂的大型应用程序,成为企业级开发语言

let和const

let

● 代码块内有效
● 不允许重复声明
● 不存在变量提升

const

● 是一个只读变量,声明后不允许被改变
● const保证的不是变量的值不变,而是变量指向的内存地址保存的数据不允许改动,简单数据类型和复合数据类型,简单数据类型值就保存在变量所指的内存地址,而复合数据类型指向的地址保存的是一个指向实际数据地址的指针,所有不建议使用const声明复合数据类型

解构赋值

数组的解构

● 基本解构
● 可嵌套
● 可忽略
● 不完全解构
● 剩余运算符
● 字符串
● 解构默认值

对象模型的解构

● 基本解构
● 可嵌套
● 可忽略
● 不完全解构
● 剩余运算符
● 字符串
● 解构默认值

Symbol

● es6新增原始数据类型,不能使用new命令
● 每个Symbol的值都不相等,所以Symbol作为对象的属性名,可以保证不重名
● Symbol作为对象属性不能使用.运算符,要用[] , .运算符后面获取的是字符串,而不是该属性
● Symbol.for()查找是否有该字符串作为参数的Symbol值,有则返回这个Symbol值
● Symbol.keyFor()返回一个已登记的Symbol类型值key,用来检测该字符串作为名称的Symbol值是否已被登记

Map和Set

Map

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

Set

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

Reflect和Proxy

Reflect

用于获取目标对象的行为,但是比object更加优雅,简洁,是一个内建对象,不能使用new构造,所有的属性和方法都是静态的
● Reflect.get(target, name, receiver)
● Reflect.set(target, name, value, receiver)
● Reflect.has(obj, name)
● Reflect.deleteProperty(obj, property)
● Reflect.construct(obj, args)

proxy

用于获取目标对象的读取、函数调用等操作进行拦截然后操作处理。一个代理对象,不直接操作对象,而是通过对象的代理对象进行操作
● get(target, propKey, receiver)
● set(target, propKey, value, receiver)
● apply(target, ctx, args)
● has(target, propKey)
● construct(target, args)
● deleteProperty(target, propKey)
● defineProperty(target, propKey, propDesc)
● getPrototypeOf(target)

ES6字符串

字符串识别

● includes()
● startsWith()
● endsWith()
● 都含有两个参数,一个是需要搜索的字符串,一个是可选的搜索的起始位置索引,返回布尔值

字符串重复

● repeat()
● 含一个参数,返回新的字符串,参数是小数向下取整,不能为负数和infinity,传入字符串会先将字符串转为数字

字符串补全

● padStart()
● padEnd()
● 含两个参数,第一个指定生成的字符串的最小长度,第二个参数是用来补全的字符串,如果第二个参数没有,默认用空格填充

模板字符串

反引号`` 变量名写入${} 模板字符串中的换行和空格都会被保留

标签模板

是一个函数的调用,调用的参数是模板字符串
fMyNameis ${name},Iam ${age+1}yearsoldnextyear.;
应用场景:过滤HTML字符串,防止用户输入恶意内容

ES6数值

二进制新写法:前缀0b或0B
console.log(0b11 === 3); // true
八进制新写法:前缀0o或0O
最大/最小安全整数
253-1~-253-1

方法

● Number.isFinite() 判断是否有限
● Number.parseInt() 将字符串转换为指定进制的整数
● Number.parseFloat() 将一个字符串解析为浮点数
● Number.isInteger() 判断给定的参数是否为整数
● Number.isSafeInteger() 判断数值是否在安全范围内

Math对象的扩展

● Math.cbrt 计算一个数的立方根
● Math.imul 大多数情况下,结果与 a * b 相同
● Math.hypot 计算所有参数的平方和的平方根
● Math.trunc 返回数字的整数部分

对象字面量

● 方法名,属性名可简写
● 拓展运算符 …
● Object.assign 用于将源对象的所有可枚举属性复制到目标对象中
● Object.is比较两个值严格相等 与===类似,但不同

数组

● Array.of() 将参数中所有值作为元素形成数组
● Array.from(arrayLike[, mapFn[, thisArg]]) 将类数组对象或可迭代对象转化为数组
● find() 查找数组中符合条件的元素,若多个符合条件,则返回第一个元素
● findIndex() 查找数组中符合条件的元素索引,若多个符合条件,则返回第一个
● fill() 将一定范围索引的数组元素内容填充为单个指定的值。// 参数1:用来填充的值// 参数2:被填充的起始索引// 参数3(可选):被填充的结束索引,默认为数组末尾
● copyWithin() 将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。 // 参数1:被修改的起始索引// 参数2:被用来覆盖的数据的起始索引// 参数3(可选):被用来覆盖的数据的结束索引,默认为数组末尾

函数

默认参数

● 使用默认参数时,不允许有同名参数
● 只有在未传递参数,或者参数为undefined时,才会使用默认参数,null被认为是有效传递值
● 暂时性死区,没有初始化赋值的参数值无法作为其他参数的默认值

不定参数

刑如: …变量名 具名参数只能在不定参数后,且只有一个

箭头函数

● 当箭头函数没有参数或多个参数时,要用()括起来
● 当箭头函数体有多行语句,用{}包裹起来,当只有一行语句时,可省略{}, 可自动返回
● 当箭头函数返回对象的时候,为了区分代码块,要用()将对象包裹起来
● 箭头函数体中的this对象,不是定义函数时的对象,而是使用函数时的对象
● 箭头函数中没有this、super、arguments和new.target绑定

模块

● export 命令可以出现在模块的任何位置,但必需处于模块顶层。
● import 命令会提升到整个模块的头部,首先执行。

import

● 只读属性:不允许在加载模块的脚本里面,改写接口的引用指向,即可以改写 import 变量类型为对象的属性值,不能改写 import 变量类型为基本类型的值。
● 单例模式:多次重复执行同一句 import 语句,那么只会执行一次,而不会执行多次。import 同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import 。
● 静态执行特性:import 是静态执行,所以不能使用表达式和变量。

export default 命令

● 在一个文件或模块中,export、import 可以有多个,export default 仅有一个。
● export default 中的 default 是对应的导出接口变量。
● 通过 export 方式导出,在导入时要加{ },export default 则不需要。
● export default 向外暴露的成员,可以使用任意变量来接收

Generator函数

Generator 有两个区分于普通函数的部分:
● 一是在 function 后面,函数名之前有个 * ;
● 函数内部有 yield 表达式。
● 调用时要调用遍历器对象Iterator的next方法

async/await

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。
await针对所跟不同表达式的处理方式:
● Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。
● 非 Promise 对象:直接返回对应的值。欢迎使用Markdown编辑器