ES6 的 Symbol 类型
ES6 引入了一种新的基本数据类型 Symbol
,它是 JavaScript 中第七种数据类型,用于表示独一无二的值。它可以作为对象的属性名,不会产生命名冲突的问题。
Symbol 的基本用法
创建一个 Symbol 类型的变量可以使用全局的 Symbol()
函数,每次调用该函数都会返回一个新的独一无二的 Symbol 值。
----- -- - --------- ----- -- - --------- -------------- --- ---- -- -----
可以将 Symbol 用作对象属性名,这样就能够保证属性名的唯一性。
----- --- - - ----------- ------- -
Symbol 的属性和方法
Symbol 类型有一些属性和方法,可以通过 Symbol
对象获取。
属性
Symbol.hasInstance
: 对象的Symbol.hasInstance
函数属性,一个指向布尔值的方法,如果一个构造器函数或者InstanceOfExpression
的原型链中有这个 Symbol 值,则 instanceof 操作符会返回 true。
----- --- -- ----- --- - --- ------ ------------------------------------------ -- ---- --------------- ---------- ----- -- ----
Symbol.isConcatSpreadable
: 对象的Symbol.isConcatSpreadable
函数属性,一个指向布尔值的方法,表示该对象是否可以展开。
----- ---- - --- -- --- ----- ---- - --- -- --- ------------------------------- -- --- -- -- -- -- -- ------------------------------- - ------ ------------------------------- -- --- -- -- --- -- ---
Symbol.iterator
: 对象的Symbol.iterator
函数属性,一个返回对象迭代器的方法。当一个对象被使用for...of
进行迭代时,会调用它的Symbol.iterator
方法获取迭代器对象。
----- --- - - -- ---- -- ---- -- ---- ------- -- ------------------ ---------- - --- ----- - -- ----- ---- - ----- ---- ----- ------ - ----- ---------- - ------ ----- - ----------- - - ------ -------------- ----- ----- - - - ------ ---------- ----- ---- -- - - - -- --- ------ ----- -- ---- - ------------------- -
Symbol.species
: 对象的Symbol.species
函数属性,一个指向构造函数的方法,用于创建派生对象。当使用内置对象的派生对象时,Symbol.species
方法将派生构造函数作为其构造函数。
----- ------- ------- ----- - ------ --- ------------------ - ------ ------ - - ----- ----- - --- ---------- --------------------------- -- ---------- ------
Symbol.match
: 对象的Symbol.match
函数属性,一个指向函数的方法,被String.prototype.match()
调用,用于正则表达式匹配。
----- ------- - ------ ------------------- - ----- ------ - --------------- ------ ------- - - ---------------------------------- -- ----- ----
Symbol.replace
: 对象的Symbol.replace
函数属性,一个指向函数的方法,被String.prototype.replace()
调用,用于字符串替换。
----- --------- - ------ --------------------- --- --- - ----- ------ - --------------- ---- ------ ------- - - ------------------ ------------------------- -------- --------------- -- ----- ----------
Symbol.search
: 对象的Symbol.search
函数属性,一个指向函数的方法,被String.prototype.search()
调用,用于字符串搜索。
----- -------- - ------ -------------------- -- - ----- ------ - --------------- ------ ------- - - ------------------ ----------------------- ---------- -- -
Symbol.split
: 对象的Symbol.split
函数属性,一个指向函数的方法,被String.prototype.split()
调用,用于字符串分割。
----- ------- - ------ ------------------- -- - ----- ------ - ------------- ------ ------- - - ------------------ --------------------- - ---- -- --------- --------
Symbol.toPrimitive
: 对象的Symbol.toPrimitive
函数属性,一个指向函数的方法,该方法被执行时,会将对象转换为原始类型。
----- --- - - -------------------------- - -- ----- --- --------- - ------ ---- - ---- -- ----- --- --------- - ------ ---- - ---- - ------ ----- - - - ------------------------- -- --- ------------------------- -- --- -------------------------- -- ----
Symbol.toStringTag
: 对象的Symbol.toStringTag
函数属性,一个用于Object.prototype.toString()的内部方法。当默认的 toString() 方法被调用时,如果这个方法存在,则它的返回值会出现在 toString() 方法返回的字符串中,表示这个对象的类型。
----- -------- - --- ---------------------- - ------ ----------- - ---------- - ------ --------- -------- - - ----- ----- - --- ----------- ------------------------------ -- -------- ------ --------------------------------------------------- -- ------- ---------
总结
Symbol 类型是 JavaScript 中的一种新型数据类型,可以用于表示独一无二的值。它的主要作用是用于对象属性名,可以避免属性名冲突的问题。除此之外,Symbol 还有一些属性和方法,可以根据具体的需求使用。在使用 Symbol 的时候,需要注意不同的 Symbol 值是不相等的,因为每次调用 Symbol() 函数都会返回一个新的 Symbol 值。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64704200968c7c53b0e637e1