在 ES6 中,Symbol(符号)是一种全新的原始数据类型,与 Number、String、Boolean、Null 以及 Undefined 一样。它的主要作用就是为对象属性的键值提供了一种全新的方式,具有独特性而不会被意外的冲突所影响。
Symbol 的创建
创建一个 Symbol 的方式非常简单,我们可以使用全局的 Symbol()
函数进行创建。
const mySymbol = Symbol();
Symbol 还可以接受一个可选的字符串参数,作为 Symbol 的描述。这个描述并不是字符串的值,而是让人类的阅读者更容易理解的实例标识符。
const mySymbol = Symbol("mySymbol"); console.log(mySymbol); // output: Symbol(mySymbol)
需要注意的是,即使你传入相同的字符串描述,每一个 Symbol 值都是唯一的。
const mySymbol1 = Symbol("mySymbol"); const mySymbol2 = Symbol("mySymbol"); console.log(mySymbol1 === mySymbol2); // output: false
Symbol 的应用场景
独特的属性名
Symbol 的主要作用是为每个对象创建一个新的属性键,以确保属性的唯一性。使用 Symbol 作为属性键可以避免属性名的冲突,特别是在混合了各种类型的属性名时更加实用。
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - - ----- ----- ----------- ---------- -- --- ---- --- -- --------- - -------------------- ------------------- - -- ------- ----- --
模拟私有属性
在 JavaScript 中没有真正的私有属性,所有的属性都是公开的。但是在某些情况下,我们需要一些私有属性来避免外部的访问和修改。使用 Symbol 可以轻松地模拟出“私有属性”的效果。
-- -------------------- ---- ------- ----- -------- - -------------------------- ----- ------- - ---------------- - -------------- - ---- - ---------- - ------ --------------- - - ----- ------- - --- ------------------ -------------------------------- -- ------- ------ ------------------------------- -- ------- -------------------
枚举对象属性
Symbol 创建的属性不会出现在 for...in 循环中,也不会出现在 Object.keys()
方法返回的结果中。这使得 Symbol 属性可以用于对象属性的枚举。
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - - ----- ----- ---- --- ----------- ----------- -- --- ---- --- -- --------- - ----------------- -- ------- -------- - ----------------------------------- -- ------- -------- ------ ---------------------------------------------------- -- ------- ------------------
总结
Symbol 是 ES6 中新增的一个数据类型,它主要用于表示唯一的属性键,可以用于避免属性名的冲突和模拟私有属性。Symbol 属性可以用于对象属性的枚举,但不会被 for...in 循环和 Object.keys()
方法枚举。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648fbd7148841e9894de4109