- ES6 教程
- ES6 - 主页
- ES6 - 概述
- ES6 - 环境
- ES6 - 语法
- ES6 - 变量
- ES6 - 运算符
- ES6 - 决策
- ES6 - 循环
- ES6 - 函数
- ES6 - 事件
- ES6 - Cookie
- ES6 - 页面重定向
- ES6 - 对话框
- ES6 - 无效关键字
- ES6 - 页面打印
- ES6 - 对象
- ES6 - 数字
- ES6 - 布尔值
- ES6 - 字符串
- ES6 - 符号
- ES6 - 新的字符串方法
- ES6 - 数组
- ES6 - 日期
- ES6 - 数学
- ES6 - 正则表达式
- ES6 - HTML DOM
- ES6 - 迭代器
- ES6 - 集合
- ES6 - 类
- ES6 - 地图和集合
- ES6 - 承诺
- ES6 - 模块
- ES6 - 错误处理
- ES6 - 对象扩展
- ES6 - 反射 API
- ES6 - 代理 API
- ES6 - 验证
- ES6 - 动画
- ES6 - 多媒体
- ES6 - 调试
- ES6 - 图像映射
- ES6 - 浏览器
- ES7 - 新特性
- ES8 - 新特性
- ES9 - 新特性
- ES6 有用资源
- ES6 - 快速指南
- ES6 - 有用的资源
- ES6 - 讨论
ES6 - 符号
符号简介
ES6 引入了一种新的原始类型,称为 Symbol。它们有助于在 JavaScript 程序中实现元编程。
句法
const mySymbol = Symbol() const mySymbol = Symbol(stringDescription)
符号只是一块可以存储一些数据的内存。每个符号将指向不同的存储位置。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)
从全局符号注册表中检索给定符号的共享符号键。 |
符号和类别
符号可以与类一起使用来定义类中的属性。优点是,如果属性是如下所示的符号,则仅当符号名称已知时才能在包外部访问该属性。因此,当符号用作属性时,数据得到了很好的封装。
例子
<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