整理ES6:聊一聊Symbol
原文链接:https://github.com/taoliujun/blog/issues/15
我在5年前看完Symbol
,就将它抛之脑后,直到最近才重新研究,看看它是什么样的宝藏。
先快速看下它是什么。
Symbol 基本用法
1 | const a1 = Symbol(); |
1 | a1 Symbol() |
- 从上可看到,
Symbol
是一个函数,它的返回值是一个Symbol
类型的值,这个值是唯一的,即使传入相同的参数,也不会相等。 - 入参的目的仅仅是为了描述它的来源。
description
返回Symbol
实例的描述。
让我使用它
假设如下代码:
1 | const WOMAN = "woman"; |
但代码足够复杂,或出于粗心,几个常量的值设置为一样的字符串,怕是难以发现。那么用Symbol可以方便的保证其唯一性。
1 | const WOMAN = Symbol(); |
Symbol 的全局注册
直接看代码:
1 | function fn1() { |
1 | fn1 false |
正如前面说的,Symbol
函数的返回值肯定是不一样的,所以多次fn1
的执行结果是不相等的。但是Symbol.for
的执行结果是相等的,因为它是全局注册的。