es6(四):Symbol,Set,Map
1.Symbol:
Symbol中文意思“象征”
Symbol:这是一种新的原始类型的值,表示独一无二的值(可以保证不与其它属性名冲突)
Symbol()函数前面不能使用new,因为生成的Symbol(下面指s)是一个原始类型的值,不是对象
1 let s=Symbol() 2 console.log(typeof s)//symbol
Symbol可以接受一个字符串作为参数,作为对Symbol的描述
1 let s1=Symbol('s1') 2 let s2=Symbol('s1') 3 //Symbol是独一无二的值,所以进行比较返回的永远是false 4 console.log(s1===s2)
Symbol的主要运用场景之一是对象属性名不会产生覆盖
1 let name1=Symbol() 2 let obj={ 3 name1:'apple',//此处name1是字符串 4 [name1]:'blue'//Symbol的name1在对象中必须用中括号括起来,否则被认为是字符串 5 } 6 console.log(obj.name1,obj['name1'],obj[name1])//前面两种是获取apple写法,后面是获取Symbol(即blue)的写法
2.Set:新的数据结构,类似数组,但是成员的值是唯一的(所以可以用来去重)
Set本身是一个构造函数
1 console.log(new Set([1,2,3,2,3])) 2 let a=new Set();//此处加上分号,因为下面这行代码以[]开头 3 [1,2,3,2,3,'2','3'].forEach(element => { 4 a.add(element) 5 }); 6 //此处说明Set内部使用的是严格相等运算符=== 7 console.log(a)//Set(5) {1, 2, 3, "2", "3"} 8 for(let i of a){ 9 console.log(i,typeof i) 10 }
实际上Set函数接收的参数不仅仅是数组,是可迭代(iterable)的数据结构【类似Python】
同时注意:两个空对象不严格相等(引用的内存地址不同),所以Set里面可以加入多个空对象
1 console.log({}==={}) 2 let b=new Set() 3 b.add({}) 4 b.add({}) 5 console.log(b,b.size)//Set(2) {{…}, {…}} 2
Set实例方法:add(value),delete(value),has(value),clear()
Set实例属性:Set.prototype.constructor(默认就是Set本身) Set.prototype.size:Set包含元素个数
1 let c=new Set() 2 c.add(1).add(2).add(3).add(2) 3 console.log(c)//Set(3) {1, 2, 3} 4 c.delete(2) 5 console.log(c)//Set(2) {1, 3} 6 console.log(c.has(2))//false 7 c.clear()//清空所有值 8 console.log(c)//Set(0) {}
3.Map:"值对值"的对应 对比传统的对象 "字符串对值"的对应
1 let m=new Map([ 2 [1,10], 3 [true,'100'] 4 ]) 5 console.log(m)//Map(2) {1 => 10, true => "100"} 6 7 console.log(m.size)//2 8 console.log(m.has(1))//true 9 console.log(m.get(true))//100 10 m.set(1,100) 11 console.log(m)//Map(2) {1 => 100, true => "100"}
也就是说Map的键不像对象的键只是字符串,map的键可以是字符串,布尔值,数值等类型
Map更符合hash结构
当时光不再,莫空留遗恨!
分类:
es6
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
2016-12-21 将python2.7+django1.10部署到SAE上
2016-12-21 配置github上的SSH key及上传自己的项目到github