形参设置初始值
特点
(1)类似于python的形参设置初始值
(2)具有默认值的参数,都放到后面
function add(a, b, c = 10) {
return a + b + c;
}
console.log(add(1, 2)) // 13
let options = [1, 2, 3, 4, 5]
console.log(add(...options)) // 6
扩展运算符
特点:
(1)将数组转换成逗号分隔的参数序列
const TF_BOYS = ['易烊千玺', '王源', '王俊凯']
function chunwan() {
console.log(arguments) // '易烊千玺', '王源', '王俊凯'
}
chunwan(...TF_BOYS)
// 数组合并
const KUAI_ZI = ['王太利', '肖央']
const FENG_HUANG = ['曾毅', '玲花']
console.log(KUAI_ZI.concat(FENG_HUANG))
console.log([...KUAI_ZI, ...FENG_HUANG]) // 性能远高于concat
// 属于的拷贝,如果里面的有引用类型,则是浅拷贝
let kuai_zi1 = [...KUAI_ZI]
(2)对象的拓展运算符
对象的拓展运算可以用于对象合并,将剩余的部分直接重新生成一个对象等,拓展开类似于一个Map
const CONFIG = {
host: '127.0.0.1',
port: '3306',
username: 'root',
password: 'root'
}
function connect({host, port, ...user}) {
console.log(host)
console.log(port)
console.log(user)
}
connect(CONFIG)
const CONFIG1 = {
type: 'oracle'
}
const CONFIG2 = {
cmd: 'sqlplus'
}
console.log({...CONFIG, ...CONFIG1, ...CONFIG2})
迭代器
特点
(1)Array、Arguments、Set、Map、String、TypeArray、NodeList部署了Iterator接口(对象中的一个属性)的都可以使用迭代器遍历
(2)可以自定义[Symbol.iterator]方法,定义遍历对象中的元素,感觉有点傻叉
尚硅谷Web前端ES6教程,涵盖ES6-ES11_哔哩哔哩_bilibili
const XIYOU = ['唐僧', '孙悟空', '猪八戒', '沙僧']
for (let item of XIYOU) {
console.log(item)
}
for (let item of '我是牛角大王'){
console.log(item)
}
生成器函数
特点:
(1)异步编程,纯回调函数
function * generator() {
console.log(111)
yield '一直没有耳朵' // yield代码分段,可以用于分段调试,next传入实参即可,异步编程参数传递
console.log(222)
yield '一直没有尾巴'
console.log(333)
yield '真奇怪'
console.log(444)
}
let iterator = generator();
// iterator.next() // 111
// iterator.next() // 222
// iterator.next() // 333
// iterator.next() // 444
for (let item of iterator){
console.log(item)
}
异步编程
JavaScript是单线程的,使用异步的方式可以避免线程切换,节省资源,但是原生的写法比较难以读懂和查看
// 传统的回调函数
setTimeout(() => {
console.log('回调编程')
setTimeout(()=>{
console.log('先等2s再说')
},2000)
}, 2000)
console.log('你会立即看到我')
Promise解决方案 -- 单独学习