Symbol() 小记

简介: es6中引入了新的基础数据类型:Symbol,唯一的标识。那么在es6中,数据类型就变成了:Number、String、Boolean、Null、undefined、Symbol、object7种使用方式// 通过Symbol()函数来创建一个Symbol实例var s = Symbol()...

es6中引入了新的基础数据类型:Symbol,唯一的标识。
那么在es6中,数据类型就变成了:NumberStringBooleanNullundefinedSymbolobject7种

使用方式

// 通过Symbol()函数来创建一个Symbol实例
var s = Symbol()
// 或者传入可选的字符串参数
var s2 = Symbol('test symbol')

typeof s // 'symbol'

var s3 = Symbol('test symbol')

s2 === s3 // false 唯一性

使用场景1:使用Symbol来作为对象属性的key

var name = Symbol()
var obj = {
  [name]: '小青',
  age: 12
}
obj[name] // 小青

注意:使用symbol类型的数据作为key,此时这个key为不可枚举类型,使用`Object.keys()`或者`for..in`是获取不到对应的key的
var obj = {
    s1: 1,
    [s2]: 2,
    s3: 4
}

console.log(Object.keys(obj)) // s1 s3

for(var k in obj) {
    console.log(k) // s1 s3
}
当然我们也可以获取到symbol类型的key的,使用如下两个方法
// 使用Object的API
Object.getOwnPropertySymbols(obj) // [Symbol(name)]
// 使用新增的反射API
Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title']

使用场景2:使用Symbol定义类的私有属性或方法

var Animal = (function() {
    var AGE_SY = Symbol()
    var GET_NAME = Symbol()
    class Animal {
        constructor(name, age) {
            this.name = name
            this[AGE_SY] = age
        }
        [GET_NAME]() {
            console.log(this.name)
        }
    }
    return Animal
})()

如上,我们用闭包和Symbol,才尽可能的实现了类的私有化方法或属性。
当我们new Animal实例的时候,并不能获取内部定义的symbol变量,所以就不能获取symbol定义的属性和方法。但是,之前我们说过可以通过getOwnPropertySymbols获得symbol定义的key,所以严格来说,并不能完全的实现类的私有属性和方法

相关文章
|
存储 弹性计算 安全
成功案例 - 钉钉
介绍钉钉及阿里云
1460 0
人工智能 缓存 前端开发
6110 18
人工智能 JavaScript 开发工具
2966 4
|
12天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
2060 121
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
缓存 JavaScript Shell
1323 1
|
13天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1649 13
|
10天前
|
编解码 弹性计算 云计算
MiniMax-H3 视频生成模型 — 一键部署与使用指南
MiniMax-H3是MiniMax开源的33B全模态视频生成模型,支持文生视频、图生视频、参考生视频三种模式,原生输出2K/15秒带立体声音频视频,已原生适配ComfyUI,并可通过阿里云计算巢一键部署。(239字)
缓存 人工智能 算法
626 1