- ES6 教程
- ES6 - 首页
- ES6 - 概述
- ES6 - 环境
- ES6 - 语法
- ES6 - 变量
- ES6 - 运算符
- ES6 - 决策
- ES6 - 循环
- ES6 - 函数
- ES6 - 事件
- ES6 - Cookie
- ES6 - 页面重定向
- ES6 - 对话框
- ES6 - void关键字
- ES6 - 页面打印
- ES6 - 对象
- ES6 - 数字
- ES6 - 布尔值
- ES6 - 字符串
- ES6 - Symbol(符号)
- ES6 - 新的字符串方法
- ES6 - 数组
- ES6 - 日期
- ES6 - 数学
- ES6 - 正则表达式
- ES6 - HTML DOM
- ES6 - 迭代器
- ES6 - 集合
- ES6 - 类
- ES6 - Map和Set
- ES6 - Promise
- ES6 - 模块
- ES6 - 错误处理
- ES6 - 对象扩展
- ES6 - Reflect API
- ES6 - Proxy API
- ES6 - 验证
- ES6 - 动画
- ES6 - 多媒体
- ES6 - 调试
- ES6 - 图片地图
- ES6 - 浏览器
- ES7 - 新特性
- ES8 - 新特性
- ES9 - 新特性
- ES6 有用资源
- ES6 - 快速指南
- ES6 - 有用资源
- ES6 - 讨论
ES6 - Symbol(符号)
Symbol(符号)简介
ES6 引入了一种新的原始数据类型:Symbol。它们有助于在 JavaScript 程序中实现元编程。
语法
const mySymbol = Symbol() const mySymbol = Symbol(stringDescription)
Symbol 只是可以存储一些数据的内存块。每个 Symbol 都指向不同的内存位置。Symbol() 构造函数返回的值是唯一且不可变的。
示例
让我们通过一个例子来理解这一点。首先,我们创建了两个没有描述的符号,然后是具有相同描述的符号。在这两种情况下,当比较符号时,相等运算符都将返回 false。
<script> const s1 = Symbol(); const s2 = Symbol(); console.log(typeof s1) console.log(s1===s2) const s3 = Symbol("hello");//description const s4 = Symbol("hello"); console.log(s3) console.log(s4) console.log(s3==s4) </script>
以上代码的输出如下所示:
symbol false Symbol(hello) Symbol(hello) false
序号 | 属性和描述 |
---|---|
1 | Symbol.for(key)
在符号注册表中搜索具有给定键的现有符号,如果找到则返回它。否则,将使用此键在全局符号注册表中创建一个新的符号。 |
2 | Symbol.keyFor(sym)
从全局符号注册表中检索给定符号的共享符号键。 |
Symbol 和类
Symbol 可与类一起使用来定义类中的属性。其优点是,如果属性是如下所示的 Symbol,则只有在知道 Symbol 名称的情况下才能在包外访问该属性。因此,当使用 Symbol 作为属性时,数据更加封装。
示例
<script> const COLOR = Symbol() const MODEL = Symbol() const MAKE = Symbol() class Bike { constructor(color ,make,model){ this[COLOR] = color; this[MAKE] = make; this[MODEL] = model; } } let bike = new Bike('red','honda','cbr') console.log(bike) //property can be accessed ony if symbol name is known console.log(bike[COLOR]) </script>
以上代码的输出如下所示:
Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"} red
广告