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,所以严格来说,并不能完全的实现类的私有属性和方法

相关文章
|
消息中间件 存储 算法
RocketMQ 重试机制详解及最佳实践
本文主要介绍在使用 RocketMQ 时为什么需要重试与兜底机制,生产者与消费者触发重试的条件和具体行为,如何在 RocketMQ 中合理使用重试机制,帮助构建弹性,高可用系统的最佳实践。
RocketMQ 重试机制详解及最佳实践
|
Android开发
Android手机模拟器如何把语言设置为中文
Android手机模拟器如何把语言设置为中文
749 0
Android手机模拟器如何把语言设置为中文
|
安全 应用服务中间件 Shell
【靶机】Tomghost-Tomcat-CVE-2020-1938
CVE-2020-1938是一个安全漏洞,涉及Apache Tomcat中的HTTP/2实现。该漏洞可以被恶意攻击者利用来访问服务器上的敏感信息,甚至可能导致执行任意代码。本靶机将对其进行复现。
248 0
|
Linux Go API
Docker快速搭建WordPress博客
Docker快速搭建WordPress博客
|
关系型数据库 数据库 Oracle
|
1天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
11天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~