ES6
函数
- 只有一个参数时可省略括号
- 函数内只有一行代码时可省略{}和 return
- 如果有{}则必须有 return
const b = (a) => {
//完整形式
return a
}
const c = (a) => a //简化模式
const b = (a) => {
//完整形式
return a
}
const c = (a) => a //简化模式
ES6拼接语法
`数据${data}`
`数据${data}`
ES6-symbol
symbol 不支持语法:"new Symbol()"。围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 new Boolean、new String以及new Number,因为遗留原因仍可被创建。所以想创建一个 Symbol 对象,可以通过 object()函数来包装。
直接使用 Symbol()传参后不会转换参数为 symbol 类型而是新建一个 symbol 类型, 使用 Symbol.for() 方法和 Symbol.keyFor() 方法从全局的 symbol 注册表设置和取得 symbol。
Object.getOwnPropertySymbols() 方法让你在查找一个给定对象的符号属性时返回一个 symbol 类型的数组。注意,每个初始化的对象都是没有自己的 symbol 属性的,因此这个数组可能为空,除非你已经在对象上设置了 symbol 属性。
ES6-BigInt
是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript 中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
不能用于 Math 对象中的方法;不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。
BigInt 和 Number 不是严格相等的,但是宽松相等的。 === false == true
ES6-const/let
先来了解一下 var 的规则,在 function 内部, 加 var 的是局部变量, 不加 var 的则是全局变量,在 function 外部, 不管有没有使用 var 声明变量,都是全局变量
举个栗子:
局部变量
function a() {
var b = 1
}
a()
console.log(b) // 报错 b is not defined
function a() {
var b = 1
}
a()
console.log(b) // 报错 b is not defined
全局变量
function a() {
b = 1
}
a()
console.log(b) // 1
function a() {
b = 1
}
a()
console.log(b) // 1
var 的缺陷:
- 希望是局部变量的变量外部却可以访问到
- for 循环指向的都是同一个变量
- 可以重复定义
for (var i = 0; i < 10; i++) {
var a = 1
}
console.log(i) // 10
console.log(a) // 1
for (var i = 0; i < 10; i++) {
var a = 1
}
console.log(i) // 10
console.log(a) // 1
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i) //3 3 3
})
}
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i) //3 3 3
})
}
var a = 1
var a = 2
console.log(a) // 2
var a = 1
var a = 2
console.log(a) // 2
使用 let 后
for (let i = 0; i < 10; i++) {
let a = 1
}
console.log(i) // 报错 i is not defined
console.log(a) // 上一步报错,执行不到这一步
for (let i = 0; i < 10; i++) {
let a = 1
}
console.log(i) // 报错 i is not defined
console.log(a) // 上一步报错,执行不到这一步
for (let i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i) // 0 1 2
})
}
for (let i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i) // 0 1 2
})
}
const 常量 let 变量
优点:
- 声明的变量拥有块级作用域
- 如 for 循环等在每次循环时都创建新的绑定
- 不可以重复定义
声明的全局变量不是全局对象的属性,不存在 window 对象上,而是一个不可见的块作用域中
const 定义原始类型的时候,这个变量是不可以改变的;定义引用类型的时候,指的是当前变量的指针不可以更改,与对象内部的值是否更改无关
ES6-箭头函数
箭头函数只有一个参数时可以省略(),函数内只有一行代码时可以省略{ } ,同时可以省略 return
注意!有{ } 时,不能省略 return,否则返回空,有 return 时,不能省略 { },否则直接报错
ES6-拓展运算符(对象展开符)
展开对象
const obj1 = { name: '周', age: 23 }
const obj2 = {
...obj1,
sex: '男'
}
console.log(obj2) // { name: '周', age: 23, sex: '男' }
const obj1 = { name: '周', age: 23 }
const obj2 = {
...obj1,
sex: '男'
}
console.log(obj2) // { name: '周', age: 23, sex: '男' }
函数传参
const numbers = [1, 2]
function push(array, ...numbers) {
array.push(...numbers)
return array
}
const array = [0]
console.log(push(array, ...numbers)) // [ 0, 1, 2 ]
function add(x, y) {
return x + y
}
console.log(add(...numbers)) // 3
const numbers = [1, 2]
function push(array, ...numbers) {
array.push(...numbers)
return array
}
const array = [0]
console.log(push(array, ...numbers)) // [ 0, 1, 2 ]
function add(x, y) {
return x + y
}
console.log(add(...numbers)) // 3
展开数组
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
字符串拆为数组
console.log([...'hello']) // [ "h", "e", "l", "l", "o" ]
console.log([...'hello']) // [ "h", "e", "l", "l", "o" ]
ES6-for ... in/for ... of
i 是数组的索引,可以根据索引取值
const a = [{ A: 1 }, { B: 2 }, { C: 3 }]
for (let i in a) console.log(a[i]) //{A:1},{B:2},{C:3}
const a = [{ A: 1 }, { B: 2 }, { C: 3 }]
for (let i in a) console.log(a[i]) //{A:1},{B:2},{C:3}
i of 是数据元素
const a = [{ A: 1 }, { B: 2 }, { C: 3 }]
for (let i of a) console.log(i) //{A:1},{B:2},{C:3}
const a = [{ A: 1 }, { B: 2 }, { C: 3 }]
for (let i of a) console.log(i) //{A:1},{B:2},{C:3}
ES6--Promise.all
同时执行接口请求
async getCode() {
const res = await Promise.all([getCode("post", { code: "BUSINESS_TYPR" }, "json"), getCode("post", { code: "ROLE_TYPR" }, "json")])
async getCode() {
const res = await Promise.all([getCode("post", { code: "BUSINESS_TYPR" }, "json"), getCode("post", { code: "ROLE_TYPR" }, "json")])