Symbol 类型
4.Symbol 类型
4.1 定义
ES6 中引入了一个新的原始数据类型Symbol
类型,它表示独一无二的值。
最大用途用来定义私有对象的私有成员。
ES6 数据类型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还新增了 Symbol 。
它是一个基本类型的值,不能使用new
关键字来创建。
补充:==
与===
的区别,详细请参考https://www.runoob.com/note/12388
const name1 = Symbol('name'); const name2 = Symbol('name'); console.log(name1===name2);// 虽然两个值相同的类型,相同的值,但是内存地址时不同的。 >>> false
4.2 使用场景
说明:一般使用较少,通常用来定义私有成员。由于 每一个Symbol的值都是不相等的,所以Symbol作为对象的属性(键),可以保证属性不重复。
-
写法一
let s1 = Symbol('s1'); let obj = {}; obj[s1] = 'mm'; console.log(s1) // 输出的值唯一 >>> Symbol(s1) console.log(obj) //{Symbol(s1): 'mm'} -
写法二
let s1 = Symbol('s1'); let obj2 = { [s1]:'jj'// 需要使用中括号进行包裹 } console.log(obj2);// >>> {Symbol(s1): 'jj'} -
写法三
let s1 = Symbol('s1'); let obj3 = {} Object.defineProperty(obj3,s1,{ value:'mjj' })// 类似与通过反射为对象进行赋值的操作。 console.log(obj3);// console.log(obj3[s1]);//mjj console.log(obj3.s1);//undefined >>> {Symbol(s1): 'mjj'} -
Symbol 作为对象属性名时不能用
.
运算符,要用方括号。因为.
运算符后面是字符串,所以取到的是字符串s1
属性,而不是 Symbol 值s1
属性
4.3 注意点
获取相关的键的时候需要使用对应的方法进行操作
let s1 = Symbol('s1'); let obj3 = {} Object.defineProperty(obj3,s1,{ value:'mjj' }) for (let key in obj3){ console.log(key);// 无输出 } console.log(Object.keys(obj3)); //[] let s = Object.getOwnPropertySymbols(obj3); console.log(s);// [Symbol(s1)] let m = Reflect.ownKeys(obj3); console.log(m);// [Symbol(s1)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!