ES6_10、Symbol数据类型和generator函数

一、Symbol数据类型

注意:

  1. 使用typeOf检测的类型为symbol,是一个单独的数据类型,基本数据类型
  2. 使用Symbol 类型不用new
  3. 使用情况一般,一般作为唯一的key值使用
  4. 使用for...in循环来遍历Symbol作为key的对象,不能遍历出来,为对象私有的;
let s=Symbol("aaa");
console.log(typeof s);
let json={
	a:1,
	b:2,
	s:111
}
console.log(json.s)

二、关系函数generator

1、关系函数的作用:解决异步,深度嵌套




	
	Document


	


2、for...of 循环会自动遍历generator函数,但是return的内容不会遍历出来

function * show(){
	yield 'abc';
	yield 'def';
	return 'hij';
}

let s=show();
for(let item of s){
	console.log(item);//abc def undefined
}

3、解构也可以遍历出generator函数,同样 return的内容不能解构出来

function * show(){
	yield 'abc';
	yield 'def';
	return 'hij';
}

let [a,b,c]=show();
console.log(a,b,c)//abc def undefined

4、扩展运算符也可以遍历...

5、Array.from()也可以用来遍历

6、案例




	
	Document



	


7、同异步

异步:不连续,上一个操作没有执行完,下一个操作照样开始

同步:连续执行,上一个操作没有完成,下一个无法开始

关于异步的解决方案:

  1. 回调事件
  2. 事件监听
  3. 发布/订阅
  4. Promise对象

8、async与promise对比

async特点:

  1. await只能放到async函数中
  2. 相比generator函数,语义化更强
  3. await后面可以是promise对象,也可以是数字、字符串、布尔
  4. async函数返回的是一个promise对象;
  5. 只要await语句后面Promise状态变成reject,整个async函数会中断执行

注意:执行的方法:在控制台执行 找到当前文件所在的文件夹,执行 【node 文件名】运行文件

var fs = require('fs');

const readFile=function(fileName){
	return new Promise((resolve,reject)=>{
		fs.readFile(fileName,(err,data)=>{
			if(err) reject(err);
			resolve(data);
		})
	})
}	

readFile('data/a.txt').then(res=>{
	console.log(res.toString());
	return readFile('data/b.txt');
}).then(res=>{
	console.log(res.toString());
	return readFile('data/c.txt');
}).then(res=>{
	console.log(res.toString());
})
var fs = require('fs');

const readFile=function(fileName){
	return new Promise((resolve,reject)=>{
		fs.readFile(fileName,(err,data)=>{
			if(err) reject(err);
			resolve(data);
		})
	})
}	

async function fn(){
	let f1=await readFile('data/a.txt');//后边的结果需要等待
	console.log(f1.toString());
	let f2=await readFile('data/b.txt');
	console.log(f2.toString());
	let f3=await readFile('data/c.txt');
	console.log(f3.toString());
}
fn();
async function fn(){
	// return 'welcome';
	throw new Error('Error出错了');
}
console.log(fn());
fn().then(res=>{
	console.log(res);
},err=>{
	console.log(err);
})

 

 

 

 

 

 

 

 

你可能感兴趣的:(三,JS类)