一. Symbol类型
1. ES6之前基础数据类型有:字符串、数值、布尔、对象、null和 undefined
2.ES6新增了一种叫做Symbol 的基础数据类型,表示独一无二的值,类似ID;
3.创建Symobl通过函数Symbol()完整,可以传递参数,也可以为空;
例
let s =Symbol();
console.log(s);//输出Symbol
console.log(typeof s);//输出Symbol类型
//注意不支持new Symbol
4.在Symbo1()函数中参数,是对变量的描述,程序无法访问,只能日志打印;
例
let s =Symbol('the s!');s!用于输出测试时,方便区分
console.log(s);
console.log(typeof s);
5.创建两个Symobel类型的变量,来验证他们独一无二的特性;
例
有没有参数,或参数是否相同都不恒等
因为Symbol是唯一存在的
let s1=Symbol('s');
s2=Symbol('s');
console.log(s1===s2);
console.log(s);
6. Symobol类型变量无法进行隐式转换,需要提前显示转换匹配的类型;
6. Symobol类型变量无法进行隐式转换,需要提前显示转换匹配的类型;
例
let s =Symbol();
console.log(s.toString()+'变量');//Symbol类型无法隐式转换,可显示
console.log(String(s)+'变量');
console.log(!s);//布尔值
属性
1. Symbol类型有哪些应用场景?解决了哪些问题?最常用的一种就是对象属性;
2.由于Symbol类型是独一无二的值,作为对象属性就具有唯一性不出现重名;
3.对于多模块、多人开发或者拼装属性名的情况下,有可能会出现属性名重复;
4.首先,先故意设置一个相同的对象属性名,看看会出现什么问题?
例
let obj={ 重名的属性名不报错,被覆盖
name:'Mr.lee',
name:'Mr.wang'
};
console.log(obj);
let x='name',
y='name';
let obj={ 拼装的属性名,也被覆盖
['user' +x]:'Mr.lee',
['user' +x]:'Mr.wang'
}
console.log(obj);
5.那么,Symbol作为对象属性名,该如何使用呢?具体如下:
6.强调:上面的例子中,属性名不是name,而是[Symbol(name)];
6.强调:上面的例子中,属性名不是name,而是[Symbol(name)];
7.其中:参数name,要不要都无所谓,主要是为了看上去清晰;
8.方法名也可以使用Symbol类型;
8.方法名也可以使用Symbol类型;
例
let x=Symbol();
y=Symbol();
let fn=Symbol();方法名
let obj={
[x]:'Mr.lee',
[y]:'Mr.wang',
[fn](){
return 'fn';
}
};
console.log(obj);
console.log(obj[y]);
console.log(obj[fn]());
数据集合
一. Set数据集合1. ES6之前只有数组一种数据结构,而现在提供了Set和 Map 两种集合;
2. Set集合是一种光重复元素的列表,使用new Set()方法创建Set集合;
例
3.我们也可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组:
4.使用has()方法查找是否存在指定元素,注意2和’2是两个元素,不会隐式转换;
5.还可以使用delete()删除指定元素、clear()清空元素;
创建一个Set集合
let set=new Set();
set.add(1);
set.add(2);
set.add(2);
set.add('2');
set.add('c');
console.log(set);
console.log(set.size);
向集合添加了5个元素,只有四个显示了,2和‘2’不冲突,空对象也不冲突
3.我们也可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组:
4.使用has()方法查找是否存在指定元素,注意2和’2是两个元素,不会隐式转换;
5.还可以使用delete()删除指定元素、clear()清空元素;
例
6.我们可以使用...语法,将Set集合转换为数组;
let set=new Set([1,2,3,4,5,6]);//初始集合
//console.log(set);结果:set 1,2,3,4,5,6
console.log(set.has(2));//true
console.log(set.has('2'));//false 2和'2'是两个元素不会转换
console.log(set);
set.delete(2);//删除2元素
console.log(set);//Set(5) { 1, 3, 4, 5, 6 }
set.clear();//全部清空
console.log(set);//Set(0) {}
6.我们可以使用...语法,将Set集合转换为数组;
例
let set=new Set([1,2,3,4,5,6]);
let array=[...set];//set转化为数组
console.log(array);
7.我们可以使用for或者forEach来遍历Set集合;
let set=new Set([1,2,3,4,5,6]);
for (let i of set){
console.log(i);
}
set.forEach(function(Key,value,s){(Key和value是set集合中的值,s是set本身)
console.log(Key+'-'+value);
console.log(s);
结果 :1-1
Set(6) { 1, 2, 3, 4, 5, 6 }
})
8. Set集合还提供针对对象的 weak Set集合,添加非对象类型会报错;
9. weak Set集合支持add(). has()和l delete()方法;
10. weak Set不支持遍历,内部隐藏(无法查看内容),不支持foreach和 size:
11.对于应用场景来说,存放对象的弱引用,不用担心对象被回收后引发的问题;
例
let ws=new WeakSet([1,2,3]);报错
let set=new Set();
obj={1:1};
set.add(obj);
console.log(set);//Set(1) { { '1': 1 } }
obj=null;
console.log(set);//Set(1) { { '1': 1 } } 结果一样
let ws = new WeakSet();
obj={1:1};
ws.add(obj);
console.log(ws.has(obj));//WeakSet { <items unknown> }内部隐藏
//has(obj) true
//has(global) false
obj=null;
console.log(ws.has(obj));//false
一. Map数据集合
1.ES6提供了Map数据集合,是一种以键值对存储的有序列表;
1.ES6提供了Map数据集合,是一种以键值对存储的有序列表;
例
let map =new Map();
map.set('name','Mr.lee');//.set添加
// map.set('name','123');覆盖上面的不能重复
map.set('age',100);
console.log(map)
console.log(map.size)//2
console.log(map.get('name'));//.get获取
2.我们也可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组:
3.使用has()检测、delete()删除、clear()清空等对Map集合的操作;
4.我们可以使用forEach来遍历Map集合,至于for遍历,下个章节说;
5. Map集合还提供针对对象的weak map集合,添加非对象类型会报错;
6. Weak Map不支持遍历,内部隐藏(无法查看内容),不支持foreach和 size;
6. Weak Map不支持遍历,内部隐藏(无法查看内容),不支持foreach和 size;
7.对于应用场景来说,存放对象的弱引用,不用担心对象被回收后引发的问题;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix