什么是 Symbol?
Symbol 是 ES6 中新增的一种原始数据类型,表示独一无二的值。每个 Symbol 值都是唯一的,可以用作对象属性名,避免属性名冲突。
ES9 中新增的 Symbol 方法
ES9 中新增了一些 Symbol 方法,让 Symbol 的应用更加灵活。
Symbol.prototype.description
Symbol.prototype.description 可以获取 Symbol 的描述信息,返回一个字符串。
示例代码:
const mySymbol = Symbol('my description'); console.log(mySymbol.description); // 'my description'
Symbol.asyncIterator
Symbol.asyncIterator 用于定义一个异步迭代器,返回一个异步迭代器对象。
示例代码:
-- -------------------- ---- ------- ----- ------------- - - ----- ------------------------- - ----- -------- ----- -------- - -- ------ ---------- - --- ----- ------ - -- -------------- - --------------- - ----- -- -- ------- - -------
Symbol.matchAll
Symbol.matchAll 用于定义一个全局的正则表达式匹配器,返回一个迭代器。
示例代码:
const regex = /[a-z]/g; const str = 'abc123'; console.log([...str.matchAll(regex)]); // [['a'], ['b'], ['c']]
Symbol.replace
Symbol.replace 用于定义一个全局的字符串替换方法,返回一个函数。
示例代码:
const regex = /(\w+)\s(\w+)/; const str = 'John Smith'; console.log(str.replace(regex, '$2, $1')); // 'Smith, John'
Symbol.search
Symbol.search 用于定义一个全局的字符串搜索方法,返回一个函数。
示例代码:
const regex = /[a-z]/g; const str = 'abc123'; console.log(str.search(regex)); // 0
Symbol.species
Symbol.species 用于定义一个构造函数,返回一个函数。
示例代码:
-- -------------------- ---- ------- ----- ------- ------- ----- - ------ --- ------------------ - ------ ------ - - ----- ------- - --- ---------- -- --- ----- ------ - ---------------- --- ------------------ ---------- --------- -- ----- ------------------ ---------- ------- -- ----
Symbol 的应用
避免属性名冲突
Symbol 可以用作对象属性名,避免属性名冲突。
示例代码:
const obj = { [Symbol('foo')]: 'foo', [Symbol('bar')]: 'bar' }; console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(foo), Symbol(bar)]
实现私有属性和方法
Symbol 可以用于实现私有属性和方法,避免被外部访问。
示例代码:
-- -------------------- ---- ------- ----- -------- - ----------- - ----- ------------- - ------------------ ----- ------- - ------------------ - ------------------- - ------ - ---------------------- - ------ -------------------- - - ------ -------- ----- ----- ---------- - --- ---------------- ---------------------- - ------- -- -------- ---------------------------------------------- -- -----
总结
Symbol 是一种独一无二的值,可以用作对象属性名,避免属性名冲突。ES9 中新增了一些 Symbol 方法,让 Symbol 的应用更加灵活。Symbol 可以用于实现私有属性和方法,避免被外部访问。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e03b761886fbafa4d740e9