湖南汽车软件网站建设,广东省建设项目安全标准自评网站,搜索引擎优化的基本原理,不良广告Symbol是什么#xff1f;
symbol是ES6标准中新增的一种基本数据类型#xff0c;symbol 的值是通过 Symbol()函数返回的#xff0c;每一个 symbol 的值都是唯一的#xff0c;即使传入相同的描述值。
注#xff1a;Symbol 函数不允许通过 new 的方式调用
Symbol的作用是什…Symbol是什么
symbol是ES6标准中新增的一种基本数据类型symbol 的值是通过 Symbol()函数返回的每一个 symbol 的值都是唯一的即使传入相同的描述值。
注Symbol 函数不允许通过 new 的方式调用
Symbol的作用是什么
因为每一个 symbol 的值都是唯一的所以不会出现重复的现象所以symbol 类型的值可以作为对象的属性标识符使用。
Symbol.iterator Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用当我们需要遍历一个对象的时候iterator函数就会被调用。 那什么是迭代器呢 迭代器就是为实现对不同集合进行统一遍历操作的一种机制 在es6中有三类结构生来就具有Iterator属性数组、类数组对象、Map和Set结构。
Symbol.iterator是如何实现遍历的呢
我们用代码模拟一下
let obj {data: [],[Symbol.iterator]() {const self this;let index 0;return {next() {if (index self.data.length) {return {value: self.data[index],done: false};} else {return { value: undefined, done: true };}}};}
};从上面的代码可以看出我们的Symbol.iterator会返回一个对象这个对象就是一个遍历器对象而作为遍历器对象其必须具备的特征就是必须具备next()方法。
Symbol.asyncIterator Symbol.asyncIterator 符号用于标识一个异步迭代器作用与 Symbol.iterator 相同但产生的值期待为 Promise 实例该异步迭代器被 for await…of 使用. 那Symbol.asyncIterator是如何实现异步迭代的呢
let obj {data: [],[Symbol.asyncIterator]() {const self this;let index 0;return {next() {if (index self.data.length) {return {value: Promise.resolve(i),done: false};} else {return { value: undefined, done: true };}}};}
};我们的Symbol.asyncIterator和Symbol.iterator一样都会返回一个对象一个遍历器对象同样在Symbol.asyncIterator里也有有一个next()方法不同的是Symbol.asyncIterator里面返回的value是一个异步的Promise.resolve(i)。执行的是异步的迭代。