面试官:ES6中为什么要使用Symbol?
ES6中为什么要使用Symbol?
1、简述ES6中Symbol的概念
ES6中已经有6种数据类型:
Undefined
Null
布尔值
字符串
数值
对象
但是在ES6种新加入一种新的数据类型Symbol 。
Symbol表示独一无二的值 。

文章图片
需要说明一下:这里的字符'saucxs'是该Symbol的一个描述 , 但是并非两个参数都是'saucxs' 。
2、简述Symbol的特性
特性1:Symbol值通过Symbol函数生成 , 使用typeof , 结果为"symbol"

文章图片
特性2:Symbol函数前不能使用new命令 , 否则会报错 。 这是因为生成的Symbol是一个原始类型的值 , 不是对象 。
特性3:instanceof的结果为false

文章图片
特性4:Symbol函数可以接受一个字符串作为参数 , 表示对Symbol实例的描述 , 主要是为了在控制台显示 , 或者转为字符串时 , 比较容易区分 。

文章图片
特性5:如果Symbol的参数是一个对象 , 就会调用该对象的toString方法 , 将其转为字符串 , 然后才生成一个Symbol值 。

文章图片
特性6:Symbol函数的参数只是表示对当前Symbol值的描述 , 相同参数的Symbol函数的返回值是不相等的 。

文章图片
特性7:Symbol值不能与其他类型的值进行运算 , 会报错 。

文章图片
特性8:Symbol值可以显式转为字符串 。

文章图片
特性9:Symbol值可以作为标识符 , 用于对象的属性名 , 可以保证不会出现同名的属性 。

文章图片
特性10:Symbol作为属性名 , 该属性不会出现在for...in、for...of循环中 , 也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回 。 但是 , 它也不是私有属性 , 有一个Object.getOwnPropertySymbols方法 , 可以获取指定对象的所有Symbol属性名 。

文章图片
【面试官:ES6中为什么要使用Symbol?】特性11:使用同一个Symbol值 , 可以使用Symbol.for 。 它接受一个字符串作为参数 , 然后搜索有没有以该参数作为名称的Symbol值 。 如果有 , 就返回这个Symbol值 , 否则就新建并返回一个以该字符串为名称的Symbol值 。

文章图片
特性12:Symbol.keyFor方法返回一个已登记的Symbol类型值的key 。

文章图片
3、为什么要使用Symbol?
比如有这样一种场景 , 我们想区分两个属性 , 其实我们并不在意 , 这两个属性值究竟是什么 , 我们在意的是 , 这两个属性绝对要区分开来!例如:

文章图片
这个时候 , 我们仅仅是想区分各种形状 , 因为不同的形状用不同的计算面积的公式 。 这里使用的是triangle的名字叫做‘Triangle’ , 而是事实上我们不想对triangle去特地取个名 , 我们只想要区分triangle这个形状不同于任何其他形状 , 那么这个时候Symbol就派上用场啦!
- 不久前|motox40官方预热:全系标配ip68防水
- 快递|国家邮政局官方回应“快递不快”:加快恢复 邮政顺丰京东开启夜派
- 俄军|如何用大疆无人机,俄军教官秀技巧,引发战场革命,前线供不应求!
- win8|微软官方宣布:win8.1已死
- 摩托罗拉X40官方预热:4600mAh+125W闪充,续航无忧
- 骁龙8|硬刚小米13!moto X40核心配置官方全面揭晓
- iQOO11首销全渠道15秒破亿 官方给出七大购买理由 高管放话:管够
- 网络安全|moto X40正式官宣,搭载第二代骁龙8
- 不装了?台积电官宣重要决定,外媒:终究是错付了
- 最新央行官网支付牌照查询教程,快速判断POS机是否是正规品牌
