Symbol
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。ES6 数据类型除了 Number 、 String 、 Boolean 、 Objec t、 null
和 undefined
,还新增了 Symbol
。
定义let syml=Symbol('aaa‘);
let syml=Symbol('aaa');
console.log(typeof(syml));//symbol
使用typeof
检测数据类型
let syml=Symbol('aaa');
console.log(syml);//Symbol(aaa)
注意:
- Symbol不能使用new
- Symbol返回唯一值
- Symbol是一个单独发数据类型
let syml=Symbol('aaa');
let json={
a:"apple",
b:"banana",
[syml]:'foryou',
};
console.log(json[syml]);//foryou
循环for in
let syml=Symbol('aaa');
let json={
a:"apple",
b:"banana",
[syml]:'foryou',
};
for(let item in json){
console.log(item);
}
//a
//b
如果symbol作为key,for in
输不出来
generator函数
解决异步,深度嵌套
使用async
会更好
语法
function * show(){
yield
}
function *gen(){
yield 'welcome';
yield 'mmr';
yield 'hello';
return 'ooooo';
}
let g1=gen();
console.log(g1);
console.log(g1.next());
console.log(g1.next());
console.log(g1.next());
console.log(g1.next());
console.log(g1.next());
手动调用,非常麻烦!
循环 for of(自动遍历generator)
return 中的内容不会遍历!
let g1=gen();
for(let val of g1){
console.log(val);
}
1、解构赋值
let [a,…b]=gen();
function *gen(){
yield 'welcome';
yield 'mmr';
yield 'hello';
return 'ooooo';
}
let [a,b,c]=gen();
console.log(a,b,c)
let [a,b,c,d]=gen();
console.log(a,b,c,d)
let [a,...b]=gen();
console.log(a,b)
2、扩展运算符
function *gen(){
yield 'welcome';
yield 'mmr';
yield 'hello';
return 'ooooo';
}
console.log(...gen())
3、Array.from
console.log(Array.from(gen()))
generator
结合axios
数据请求
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
异步:不连续,上一个操作没有执行完,下一个操作照样开始
同步:连续执行,上一个操作没有完成,下一个没法开始。
关于异步,解决方案:
- 回调函数
- 事件监听
- 发布订阅
- Promise