1.Symbol的基本使用
symbol表示独一无二的值,类似于字符串的数据类型
特点:1)symbol的值是唯一的,用来解决命名冲突的问题
2)symbol值不能与其他数据进行运算
3)symbol定义的对象不能用for…in… 进行遍历,但可以使用reflect.ownKeys来获取对象的所有键名
数据类型:USONB
U:undefiend
S;string,symbol
O:object
N:null,number
B:boolean
应用场景:
迭代器(iterator):是一种接口,为各种不同数据结构提供统一的访问机制
生成器:是一种特殊的函数,异步编程
生成器函数的参数传递:
next()方法可以传入实参的,传参将作为上一个yield的返回结果
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
//异步编程 1s后控制台输出111,接着2s后输出222,3输出333
function one(){
setTimeout(()=>{
console.log(111);
iterator.next();
},1000)}
function two(){
setTimeout(()=>{
console.log(222);
iterator.next();
},2000)}
function three(){
setTimeout(()=>{
console.log(333);
iterator.next();
},3000)}
function* gen(){
yield one();
yield two();
yield three();
}
let iterator=gen();
iterator.next();
</script>
</body>
</html>
2.获取信息
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
//模拟获取 用户数据 订单数据 商品数据
function getUsers(){
setTimeout(()=>{
let data="用户信息";
iterator.next(data);
},1000)
}
function getOrders(){
setTimeout(()=>{
let data="订单信息";
iterator.next(data);
},1000)
}
function getGoods(){
setTimeout(()=>{
let data="商品信息";
iterator.next(data);
},1000)
}
function* gen(){
let users=yield getUsers();
console.log(users);
let order=yield getOrders();
console.log(order);
let goods=yield getGoods();
console.log(goods);
}
let iterator=gen();
iterator.next();
</script>
</body>
</html>