Symbol 数据类型
ES6引入了一种新的数据类型Symbol,表示独一无二的值。它是JS的第七种数据类型,前六种分别是number、string、undefined、null、boolean、object。
特点:
- Symbol值是唯一的,解决命名冲突的问题;
- Symbol值不能与其他数据进行计算,包括字符串的拼接;
- for…in、for…of 不会遍历Symbol属性。
Symbol是函数,但并不是构造函数。创建一个Symbol数据类型:
const symbol=Symbol();
console.log(typeof(symbol));//symbol
Symbol的使用
1.作为对象的属性值
const sym=Symbol();
const obj={ name:'hua' };
obj[sym]='aaa';//注意!只能通过属性选择器[]来添加和读取
console.log(obj, obj.sym, obj[sym]);// {name:'hua',Symbol():'aaa'} undefined aaa
for(let k in obj){console.log(obj[k]); // hua
}
2.定义常量
const m=Symbol('my');
Set 数据结构
Set类似于数组,但值都是唯一不重复的。Set本身是一个构造函数,通过new Set()生成一个Set实例。
const set=new Set();
const set2=new Set([1,2,2,3,3,3]);
console.log(set2);//Set(3) {1,2,3} //不是数组,是Set数据结构
console.log([...set2]);//[1,2,3] //数组
Map 数据结构
Map类似于对象,也是键值对的集合,但它的键不限于字符串。也就是说Object结构提供了“字符串-值”的对应,Map结构提供了“值-值”的对应,是一种更为完善的Hash结构实现。
const map=new Map();
map.set(key,value);//添加
map.get(key);//通过键获取值
map.delete(key);//删除
Map的键实际上是和内存地址绑定的,只要内存地址不一样,就视为两个键。
const map=new Map();
map.set(['b'],1);
console.log(map.get(['b'])); //undefined
const a=['b'];
map.set(a,1);
console.log(map.get(a)); //1
promise ⭐
① 同步、异步
<img src=“https://juejin.cn/ “点击并拖拽以移动”)编” style=“margin: auto” />
主线程执行同步任务完毕后,查询任务队列是否还有异步任务。
② 含义
Promise是ES6引入的异步编程的一种新解决方案。本身是一个构造函数。
简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
注意:
- 一个 promise对象只能改变一次状态,成功或者失败后都会返回结果数据。
- 状态变化只有两种可能:从 pending 变为 fulfilled 和 从 pending 变为 rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。
- 后文中的 resolved 只指 fulfilled状态,不包括 rejected。
③ 基本使用
之前遇到的异步任务都是一次异步,如果需要多次调用异步函数,是通过“函数瀑布”来实现的,这种也称为“回调地狱”。
//1s后开始打印,共输出三次,每次间隔1s
setTimeout(() => {console.log('first');setTimeout(() => {console.log('second');setT