ES7 对于类型代表符号是什么?
随着 JavaScript 这门语言的发展,ES7(ECMAScript 2016)引入了一些新的特性,其中之一就是类型代表符号(Symbol)。
Symbol 是 JavaScript 中的一种基本数据类型,它可以用来创建一个独一无二的值,可以用作对象属性的键名,以防止属性名的冲突。Symbol 值是通过 Symbol 函数创建的,例如:
const symbol1 = Symbol(); const symbol2 = Symbol('symbol2');
上面的代码中,我们通过 Symbol 函数分别创建了两个 Symbol 值,symbol1 和 symbol2,其中 symbol2 的描述是可选的,用来描述该 Symbol 值的用途。
类型代表符号的一个重要应用是在对象中定义私有属性。在 JavaScript 中,对象的属性可以通过访问器(getter 和 setter)来进行读写,但是这样会暴露属性的实现细节,因此可以使用类型代表符号来隐藏属性。
例如,我们可以定义一个名为 Person 的类来表示一个人,其中包含一个私有属性 _name:
-- -------------------- ---- ------- ----- ---------- - --------------- ----- ------ - ----------------- - ---------------- - ----- - --- ------ - ------ ----------------- - --- ----------- - ---------------- - ------ - - ----- ------ - --- ------------- ------------------------- -- ---- ----------- - ----- ------------------------- -- ---- -------------------------------- -- ---------
上面的代码中,我们使用类型代表符号来定义了私有属性 _name,通过访问器来读写该属性的值,外部无法直接访问 _name 属性。
除了用作对象属性的键名之外,类型代表符号还可以用来创建一些内置的 Symbol 值,例如:
- Symbol.iterator:用来定义一个对象的默认迭代器方法;
- Symbol.asyncIterator:用来定义一个对象的异步迭代器方法;
- Symbol.toStringTag:用来定义一个对象的默认的 toString() 方法的返回值。
示例代码:
-- -------------------- ---- ------- ----- ---------- - - ------------------ ----------- - ----- -- ----- -- ----- -- - -- --- ---- ----- -- ----------- - ------------------- - -- --- -- - -- - -- - ----- ------------- - ------------------------ - ------ - -- -- ------ - -- ------- - -- - ------ ----------------- ------ --------- ----- ----- --- - ------ ----------------- ----- ---- --- - -- - - ------ ---------- - --- ----- ---- ----- -- --- ---------------- - ------------------- - ----- -- --- -- - -- - -- - ----- ------ - --- ---------------------- - ------ --------- - - ----- ------ - --- --------- ------------------------------- -- -------- --------
总结:
类型代表符号是 ES7 中引入的一种基本数据类型,可以用来创建一个独一无二的值,可以用作对象属性的键名,以防止属性名的冲突。类型代表符号的一个重要应用是在对象中定义私有属性,可以使用访问器来读写该属性的值,外部无法直接访问私有属性。除此之外,类型代表符号还可以用来创建一些内置的 Symbol 值,例如 Symbol.iterator、Symbol.asyncIterator 和 Symbol.toStringTag 等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/656be876d2f5e1655d442910