在 ES6 中,Symbol(符号)是一种新的原始数据类型,可以用于标识对象的属性键。可以将 Symbol 可以看作是唯一且不可变的值,即使两个 Symbol 的值相同,它们也是不相等的。
Symbol 的创建和使用
使用 Symbol()
函数可以创建一个新的 Symbol 类型的值。每个 Symbol 都是唯一的,不能被复制或者比较。我们可以将 Symbol 用作对象属性的键来确保该属性的唯一性。
const symbol1 = Symbol(); const symbol2 = Symbol('mySymbol'); console.log(symbol1); console.log(symbol2);
上述代码中,我们创建了两个不同的 Symbol 类型变量,其中 symbol2 是以字符串 'mySymbol' 为描述符创建的,会在输出中显示,而默认为“Symbol()”。
我们可以使用以下代码来对对象进行属性键的定义和赋值。
const myObject = {}; myObject[symbol1] = 'Hello'; myObject[symbol2] = 'World'; console.log(myObject[symbol1]); console.log(myObject[symbol2]);
上述代码中,我们定义了 myObject
对象,通过使用 Symbol
作为属性名,将 'Hello' 和 'World' 分别赋值给 symbol1
和 symbol2
属性。
Symbol 属性的保护
Symbol 属性可以保护对象中的一些特定数据,例如敏感数据或者私有数据,以防止被不小心的修改或者访问。
下面是一个例子,其中创建了一个对象以通过 Symbol 属性来定义私有数据,同时提供了一些方法以更改这些数据:
-- -------------------- ---- ------- ----- ------------- - --- -- - ----- ------------ - --------------- ----- ----- - ---------------- ----- ------------- - -------------- - ----------- - -- ------------------ - ----- - ----- - -- -------------------- - ------ ------------ - ---- - ------ ---------- - - ------ - -- -------------------- - ----------- - -- - ---- - --------------------- ---------- - - - ------ -------------- -----
上述代码中,我们返回了一个 IIFE(立即调用的函数表达式)并创建了一个 MyPrivateData
类。类中使用了两个 Symbol 属性来存储私有数据和初始化标记,从而保护数据不被不小心修改或者访问。
Symbol 的遍历和内置 Symbols
我们可以使用 Object.getOwnPropertySymbols()
方法访问对象中的 Symbol 属性。这个方法会返回一个给定对象自身的可枚举 Symbol 属性值的数组。
const myObject = {}; const symbol1 = Symbol('mySymbol1'); const symbol2 = Symbol('mySymbol2'); myObject[symbol1] = 'Hello'; myObject[symbol2] = 'World'; console.log(Object.getOwnPropertySymbols(myObject));
上述代码中,我们为 myObject
对象创建了两个 Symbol 属性 symbol1
和 symbol2
。通过使用 Object.getOwnPropertySymbols(myObject)
方法,我们可以获取包含这些 Symbol 属性的数组。
此外,在 ES6 中,还有一些内置的 Symbol 属性可以使用,例如 Symbol.iterator
,它可以用于创建一个对象的迭代器。 Symbol.toPrimitive
可以用于从对象中提取原始值。其他内置的 Symbol 属性还包括:Symbol.hasInstance
、Symbol.match
、Symbol.replace
等等。
结论
通过本文的学习,我们了解了 ES6 中 Symbol 类型的使用和基本功能。Symbol 属性的创建和使用以及 Symbol 的遍历和内置 Symbols。同时,我们通过一些简单的示例代码,可以更好地理解 Symbol 的概念和使用。
在实际代码开发中,我们可以使用 Symbol 来确保对象属性的唯一性以及保护对象中的私有数据等。 Symbol 是一种强有力的工具,可以为我们的前端开发带来更加安全和高效的代码实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67356ad50bc820c5824e52c6