Js基础---Symbol

145 阅读2分钟

定义

symbol 是一种基本数据类型 (primitive data type)。Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。

每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol('foo');

console.log(typeof symbol1);
// expected output: "symbol"

console.log(symbol2 === 42);
// expected output: false

console.log(symbol3.toString());
// expected output: "Symbol(foo)"

console.log(Symbol('foo') === Symbol('foo'));
// expected output: false

属性

迭代

Symbol.iterator:一个返回一个对象默认迭代器的方法。被 for...of 使用。 

Symbol.asyncIterator :一个返回对象默认的异步迭代器的方法。被 for await of 使用。 

正则表达式  

Symbol.match:一个用于对字符串进行匹配的方法,也用于确定一个对象是否可以作为正则表达式使用。被 String.prototype.match() 使用。 

Symbol.replace:一个替换匹配字符串的子串的方法. 被 String.prototype.replace() 使用。 

Symbol.search:一个返回一个字符串中与正则表达式相匹配的索引的方法。被String.prototype.search() 使用。 

Symbol.split:一个在匹配正则表达式的索引处拆分一个字符串的方法.。被 String.prototype.split() 使用。 

其他 

Symbol.hasInstance:一个确定一个构造器对象识别的对象是否为它的实例的方法。被 instanceof 使用。 

Symbol.isConcatSpreadable:一个布尔值,表明一个对象是否应该flattened为它的数组元素。被 Array.prototype.concat() 使用。 

Symbol.unscopables:拥有和继承属性名的一个对象的值被排除在与环境绑定的相关对象外。 

Symbol.species:一个用于创建派生对象的构造器函数。 

Symbol.toPrimitive:一个将对象转化为基本数据类型的方法。 

Symbol.toStringTag:用于对象的默认描述的字符串值。被 Object.prototype.toString() 使用。

静态方法

Symbol.for(key):使用给定的key搜索现有的symbol,如果找到则返回该symbol。否则将使用给定的key在全局symbol注册表中创建一个新的symbol。 

Symbol.keyFor(sym):从全局symbol注册表中,为给定的symbol检索一个共享的?symbol key。

原型方法

Symbol.prototype.toString():返回包含Symbol描述符的字符串。 覆盖Object.prototype.toString() 方法。 

Symbol.prototype.valueOf():返回 Symbol 对象的初始值.。覆盖 Object.prototype.valueOf() 方法。 

Symbol.prototype[@@toPrimitive]:返回Symbol对象的初始值。

参考

Symbol | MDN

ES6的Symbol竟然那么强大,面试中的加分点啊

面试官:JavaScript 原始数据类型 Symbol 有什么用?

ES6实践:Symbols及其使用

带你重学ES6 | Symbol(不仅仅只是一个新的数据类型)