首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Symbols

介绍

从 ECMAScript 2015 开始,symbol是一种原始数据类型,就像numberstring

symbol值是通过调用Symbol构造函数创建的。

代码语言:javascript
复制
let sym1 = Symbol();

let sym2 = Symbol("key"); // optional string key

符号是不可改变的,并且是唯一的。

代码语言:javascript
复制
let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, symbols are unique

就像字符串一样,符号可以用作对象属性的关键字。

代码语言:javascript
复制
let sym = Symbol();

let obj = {
  [sym]: "value"
};

console.log(obj[sym]); // "value"

符号也可以与计算属性声明结合来声明对象属性和类成员。

代码语言:javascript
复制
const getClassNameSymbol = Symbol();

class C {
  [getClassNameSymbol](){
     return "C";
  }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

众所周知的符号

除了用户定义的符号之外,还有众所周知的内置符号。内置符号用于表示内部语言行为。

以下是一些着名符号的列表:

Symbol.hasInstance

一种确定构造函数对象是否将对象识别为构造函数实例之一的方法。由instanceof操作符的语义调用。

Symbol.isConcatSpreadable

一个布尔值,指示对象应该通过 Array.prototype.concat 平铺到其数组元素。

Symbol.iterator

一个返回对象的默认迭代器的方法。由 for-of 语句的语义调用。

Symbol.match

一个正则表达式方法,用于将正则表达式与字符串相匹配。由该String.prototype.match方法调用。

Symbol.replace

用于替换字符串的匹配子字符串的正则表达式方法。由String.prototype.replace方法调用。

Symbol.search

一个正则表达式方法,它返回与正则表达式匹配的字符串中的索引。由String.prototype.search方法调用。

Symbol.species

一个函数值属性,是用于创建派生对象的构造函数。

Symbol.split

正则表达式方法,用于在匹配正则表达式的索引处拆分字符串。由该String.prototype.split方法调用。

Symbol.toPrimitive

将对象转换为相应的原始值的方法。由ToPrimitive抽象操作调用。

Symbol.toStringTag

一个字符串值,用于创建对象的默认字符串描述。由内置方法调用Object.prototype.toString

Symbol.unscopables

一个Object,其自己的属性名称是从关联对象的 'with' 环境绑定中排除的属性名称。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com