ES6新增数据类型:
Symbol 使用情况一般
用 typeof 检测出来的类型是: symbol
注意:
1.Symbol不能new出来
2.Symbol()返回的是一个唯一的值使用可以做一个key,定义一些唯一或者私有的一些东西
3.symbol 是一个单独的数据类型,就叫symbol,属于基本数据类型
4.如果symbol作为key,用 for in 循环,出不来
Symbol的定义和使用
<script > let syml = Symbol('aaa'); console.log(syml); console.log(typeof syml); </script>
Symbol可用于json中:
<script > let symbol = Symbol('kirin'); let json = {
a: 'apple', b: 'banana', [symbol]: 'aaa' }; console.log(json['a']); console.log(json[symbol]); console.log("split---"); for (let item in json) {
console.log(item); } </script>
箭头函数:
<script > ()=>{
} </script>
generator 函数:生成器
是为了解决异步深度嵌套的问题
generator函数语法:
<script > function * show() {
//只能配合generator函数来使用 yield } //如: function* gen() {
yield 'welcome'; yield 'to'; yield 'school';+ } </script>
- 调用:
<script > function* gen() { yield 'welcome'; yield 'to'; return 'school';- } let g1 = gen(); console.log(g1.next()); // {value: "welcome", done: false} value:值 , done:后面是否为空 console.log(g1.next()); console.log(g1.next());// 此时返回的是最后一个,done:true </script>
上述调用为手动调用
- for…of…自动便利generator,但是不会遍历到generator,如:
<script > function* gen() { yield 'welcome'; yield 'to'; return 'school'; } let g1 = gen(); for (let val of g1) { // 此时不会输出return的东西 console.log(val); } </script>
还可以使用解构赋值(它解构并不会解构return的东西),如:
<script > function* gen() {
yield 'welcome'; yield 'to'; return 'school'; } let [a, b] = gen(); console.log(a, b); </script>
或者配合解构:
<script > function* gen() {
yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } let [a, ...b] = gen(); console.log(a, b); </script>
或者使用扩展运算符:
<script > function* gen() {
yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } console.log(...gen()); </script>
也可以配合Array.from()来使用:
<script > function* gen() {
yield 'welcome'; yield 'to'; yield '51.cnm'; return 'school'; } console.log(Array.from(gen())); </script>
异步:不连续,上一个操作没有执行完,下一个操作照样开始
同步:连续执行,上一个操作没有执行完,下一个没法开始
关于异步的解决方案:
回调函数
事件监听
发布/订阅
Promise对象
<script > async function fn() {
let result=await xxx; //表示后面结果需要等待 } </script>
补充:async特点:
1.await只能放到async函数
2.相比generator语义化更强了
3.await后面可以是promise对象,也可以是数字,字符串等等
4.async返回的是promise对象
5.只要await语句后面promise状态变成一个reject时,整个async函数就会中断执行,如:
<script > async function fn() { throw new Error('Error出错了'); } fn().then(res=>{ console.log(res)},err=>{ console.log(err);}) </script>
async函数中解决抛错:影响后续代码:使用try{}catch(){}
推荐在任何有await的地方,都用try,catch