符号(Symbol)是ES6中添加的一种新的基本数据类型,它是一种原始数据类型,用于表示唯一的标识符。在ES12中,符号得到了进一步增强和扩展,包括更多的内置符号和新的API,本文将介绍符号的基本概念、使用方法和示例代码。
符号的基本概念
符号是ES6中引入的一种新的基本数据类型,它用于表示唯一的标识符。符号的创建方式如下:
const sym = Symbol();
符号可以作为对象属性的键名使用,它的唯一性保证了不同的符号作为键名不会冲突。例如:
-- -------------------- ---- ------- ----- ---- - --------- ----- ---- - --------- ----- --- - - ------- --------- ------- -------- -- ----------------------- -- -------- ----------------------- -- --------
内置符号
在ES12中,符号得到了进一步增强和扩展,其中包括更多的内置符号。这些内置符号可以用于自定义对象的行为,例如迭代、异步迭代、比较、拦截等。以下是一些常用的内置符号:
Symbol.iterator
该符号用于定义一个对象的默认迭代器,它返回一个迭代器对象,该对象可以用于遍历对象的属性。例如:
-- -------------------- ---- ------- ----- --- - - ------------------- - --- ----- - -- ----- ------ - --- -- --- ------ - ------ - -- ------ - -------------- - ------ - ------ ---------------- ----- ----- -- - ---- - ------ - ----- ---- -- - - -- - -- --- ------ ----- -- ---- - ------------------- - -- ---- - -
Symbol.asyncIterator
该符号用于定义一个对象的异步迭代器,它返回一个异步迭代器对象,该对象可以用于异步遍历对象的属性。例如:
-- -------------------- ---- ------- ----- --- - - ----- ------------------------- - ----- ------ - --- -- --- --- ------ ----- -- ------- - ----- --- --------------- -- ------------------- ------- ----- ------ - - -- ------ -- -- - --- ----- ------ ----- -- ---- - ------------------- - ----- -- ---- - -
Symbol.match
该符号用于定义一个对象的匹配方法,它接受一个字符串参数,并返回一个布尔值,用于表示该字符串是否匹配该对象。例如:
const obj = { [Symbol.match](str) { return str === 'hello'; } }; console.log('hello'.match(obj)); // true console.log('world'.match(obj)); // false
Symbol.toPrimitive
该符号用于定义一个对象的转换方法,它接受一个参数hint,该参数表示预期的转换类型,包括"number"、"string"和"default"。例如:
-- -------------------- ---- ------- ----- --- - - -------------------------- - ------ ------ - ---- --------- ------ ---- ---- --------- ------ -------- -------- ------ -------- --------- - - -- ------------------------- -- --- ------------------------- -- ------- --------------- - ---- -- -------- --------
新的API
在ES12中,符号也得到了新的API,包括Symbol#description、Symbol#keyFor和Reflect#enumerate。以下是一些常用的API:
Symbol#description
该API用于获取符号的描述信息,它返回一个字符串,用于表示符号的描述信息。例如:
const sym = Symbol('hello'); console.log(sym.description); // 'hello'
Symbol#keyFor
该API用于获取符号的全局键名,它接受一个符号参数,并返回一个字符串,用于表示符号的键名。例如:
const sym = Symbol.for('hello'); console.log(Symbol.keyFor(sym)); // 'hello'
Reflect#enumerate
该API用于获取一个对象的所有属性,它返回一个迭代器对象,该对象可以用于遍历对象的所有属性,包括符号属性。例如:
-- -------------------- ---- ------- ----- --- - --------- ----- --- - - ------ -------- ---- ----- -- --- ------ --- -- ----------------------- - ----------------- - -- -------- --------
总结
符号是ES6中引入的一种新的基本数据类型,它用于表示唯一的标识符。在ES12中,符号得到了进一步增强和扩展,包括更多的内置符号和新的API。我们可以利用这些内置符号和API来自定义对象的行为,使代码更加灵活和易于维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d49570add4f0e0ffc7e3f1