数据类型:
number、string、boolean、Object、undefined、function
在ES6中又新增了symbol
语法:
let syml = new Symbol('aaa');
像其他数据类型,可以new
new Number(12)
new String()
new Array()注意:
1、但symbol不可以new
2、Symbol() 返回是一个唯一值
3、如何检验、输出变量数据类型:用typeof
let syml = Symbol('aaa'); console.log(typeof syml);
4、可以当key值使用:
let symbol = Symbol('Strive'); let json ={ a:'apple', b:'banana', [symbol]:'aaa' }; console.log(json[symbol]);
5、当symbol作key,用for in循环出不来
let symbol = Symbol('Strive'); let json ={ a:'apple', b:'banana', [symbol]:'aaa' }; for(let key in json){ console.log(key); }
输出时没有symbol作的key
【generator函数
‘生成器’
解决异步,深度嵌套的问题,现在有更好的解决方案: async】语法:
function * show(){ yield } function* show(){ } function *show(){ }
定义+调用:
function * gen(){ yield 'welcome';//第一步 yield 'to';//第二步 return '牧码人';//第三步 } let g1 = gen(); console.log(g1.next()); //{value: "welcome", done: false没完成} console.log(g1.next()); //{value: "to", done: false} console.log(g1.next()); //{value: "牧码人", done: true} console.log(g1.next());
循环调用:
for(let val of g1){ console.log(val);//不会遍历到return! }
generator不仅可以配合for...of还可以
1、解构赋值
function * gen(){
yield 'welcome';
yield 'to';
yield '51mmr.net';
return '牧码人';
}
//let [a,b,c] = gen();//只能解构yield 结果中c=undefind
let [a, ...b] = gen();//let[a.b.c]
console.log(a, b);
2、 扩展运算符
跟解构的结果一样
console.log(...gen());
3. Array.from()
console.log(Array.from(gen())); 等于数组了
4、实例:【generator结合 axios数据请求:常配合promise】
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
//https://api.github.com/users/itstrive
function * gen(){
let val = yield 'aaa';
yield axios.get(`https://api.github.com/users/${val}`);
}
let g1 = gen();
let username = g1.next().value;
//console.log(g1.next(username).value);
g1.next(username).value.then(res=>{
console.log(res.data);
});
</script>
【关于异步】
解决方案:
a). 回调函数
b). 事件监听
c). 发布/订阅
d). Promise对象