javascript中symbol类型的应用场景(意义)和使用方法

 

不需要对外操作和访问的属性使用Symbol来定义

使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外

所以:

场景一:利用这一特点来更好的设计我们的数据对象,让“对内操作”和“对外选择性输出”变得更加优雅。

Object.getOwnPropertySymbols(obj) // [Symbol(name)]

// 使用新增的反射API
Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title']

Symbol类型的key是不能通过Object.keys()或者for...in来枚举的

Object.getOwnPropertyNames(obj) 也获取不到symbol

Object.getOwnPropertyNames(obj) 

场景二:使用Symbol来替代常量

使用方法:

const TYPE_AUDIO = Symbol()
const TYPE_VIDEO = Symbol()
const TYPE_IMAGE = Symbol()

场景三:设置私有属性

实例上访问不到symbol属性

场景四:

注册和获取全局Symbol

let gs1 = Symbol.for('global_symbol_1')  //注册一个全局Symbol
let gs2 = Symbol.for('global_symbol_1')  //获取全局Symbol

gs1 === gs2  // true

场景五:

iterator迭代器

参考:https://www.jianshu.com/p/f40a77bbd74e

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值