JS Symbol

Symbol

Symbol英文翻译为符号,标记,象征。是JS在es6中继string、Boolean、number、null、undefined之后新增的基础数据类型,也叫原生数据类型。

作为一个基础数据类型,用法与其他数据类型相似,但是不能使用new操作符,也就是说它并不是一个构造函数(例如:new Symbol())。

console.log(typeof Symbol())
// 'symbol'

如上,所有通过Symbol声明的变量类型都是symbol。

Symbol作用

const info1 = {name:'小红', age:25, des:'喜欢吃'}
const info2 = {name:'小红', age:25, des:'喜欢看电影'}
const info3 = {name:'小红', age:25, des:'喜欢玩游戏'}
const info = {...info1,...info2,...info3};
console.log(info);
//age: 25
//des: "喜欢玩游戏"
//name: "小红"

例如我们收集信息时,三个info的数据对象结构都一致,当我们在做数据整理时,只有最后一个des会被整理到,因为前两个des会被最后一个覆盖

const info1 = {name:'小红', age:25, [Symbol('des')]:'喜欢吃'}
const info2 = {name:'小红', age:25, [Symbol('des')]:'喜欢看电影'}
const info3 = {name:'小红', age:25, [Symbol('des')]:'喜欢玩游戏'}
const info = {...info1,...info2,...info3};
console.log(info);//age: 25
//age: 25
//name: "小红"
//Symbol(des): "喜欢吃"
//Symbol(des): "喜欢看电影"
//Symbol(des): "喜欢玩游戏"

如上我们将每个info的des设置为Symbol类型,在最后整理信息时便会出现三个des参数。虽然三个des键值看起来一样,实质上是三个独立的键值,互相不受影响,且能同时存在。

以上只是一个简单的例子,本身没没什么意义,只是方便我们理解Symbol的作用。

Symbol语法

Symbol([description])

其中description为可选参数,字符串,没什么特别的作用,就是debug调试的时候可以用来作为标记。

如何获取Symbol()对应属性值?

const symbolList = Object.getOwnPropertySymbols(info)
console.log(symbolList);
//0: Symbol(des)
//1: Symbol(des)
//2: Symbol(des)

当我们将Symbol和对象结合使用时免不了要结合[]的写法

const des = Symbol('des');
const info = {
    des:'des',
    [des]:'symbol_des'
}
console.log(info.des); //des
console.log(info['des']); //des
console.log(info[des]); //symbol_des

所以借助Symbol我们可以进行debug或者声明一个对象的特殊属性。

其他

值得注意的是Symbol类型的键值是不能通过for… in…、in、hasOwnProperty去枚举查看的。

const info1 = {name:'小红', age:25, [Symbol('des')]:'喜欢吃'}
const info2 = {name:'小红', age:25, [Symbol('des')]:'喜欢看电影'}
const info3 = {name:'小红', age:25, [Symbol('des')]:'喜欢玩游戏'}
const info = {...info1,...info2,...info3};
console.log(Object.keys(info));// name,age
console.log(info.hasOwnProperty(Symbol('des')));//false

只能通过Object.getOwnPropertySymbols()去获取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值