阅读讨论原始数据的 MDN 文档,无论Symbol
我阅读和重读多少,我不明白除了 iterate 之外,所述元素的用例是什么Symbol.iterator
。
文档说它的用途是用于调试目的,但即使这样我也不明白为什么要使用 a来调试 if或Symbol
exists 。console.log()
debugger
我知道它是原始数据,因此是不可变的。在示例中,我看到他们执行以下操作:
var sym = Symbol('Llave'),
obj = {
[sym]: 'valor'
};
console.log(obj[sym]); // valor
console.log(obj['Llave']); // undefined
为什么使用Symbol
? 如果可以使用传统键(键:值)。
资料来源:
符号是不可变的唯一数据类型,可用作对象属性标识符。这些类似于类型
Number
、String
和Boolean
原语。要创建它,请按以下方式完成,不使用 new 一词,因为它们
Symbols
具有Symbol
用于创建它们的功能;正如我在上面评论的那样,作为独特的类型,它将创建一个不会是另一个的新符号:
关于
debuging
这些被认为是强大的,因为它们有一个描述,仅用于调试,以便在通过控制台调试时更轻松:它们有什么用处?:
创造和存储价值
integer
,string
这不会改变。它可用于存储对象的自定义元数据,这些对象是当前对象的子对象。
结论:
它们是具有一些额外属性的小常量,使我们能够更好地调试并保存唯一值。
一个很好的资源是这个页面,其中有一个示例,它们更广泛地解释了符号是什么。
由于@WilfredoP 没有提到全局符号,我将利用:
这里
s1
和s2
符号基本相同。但是符号的编码方式不如其用途重要:它们
Symbols
是 Javascript 向元编程方向发展的一部分。而且他们并不孤单,ECMAScript 2015 还包括另外两个指向该行的附加项,即Proxy和Reflect。因此,它的用途是多种多样的。问题是这些对您的应用程序有什么语义。
有一些众所周知的符号!
Symbol.hasInstance:instanceof
Symbol.hasInstance
是控制 的行为的符号instanceof
。也就是说,A instanceof B
它是等价的B[Symbol.hasInstance](A)
。例子:
符号迭代器
重载该方法
objeto[Symbol.iterator]
允许您更改of
块中运算符的行为,for .. of
如果它被重载为生成器函数。例子:
标准预定义的这些符号有很长的列表。但并非所有这些都在所有浏览器中 100% 实现。