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")])