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