符号
描述
const sym1=符号(); const sym2=符号(“foo”); const sym3=符号(“foo”);
符号(“foo”)===符号(“foo”);// 假
const sym=新符号();// 类型错误
const sym=符号(“foo”); sym类型;// “符号” const symObj=对象(sym); symObj的类型;// “对象”
全局符号注册表中的共享符号
Symbol.keyFor(Symbol.for(“tokenString”))===“tokenString”;// 真的
众所周知的符号
查找对象上的符号特性
施工单位
符号() -
返回Symbol类型的基元值。 使用调用时引发错误 新的 .
静态特性
符号.asyncIterator -
返回对象的默认AsyncIterator的方法。 使用者 等待。。。 属于 . 符号.hasInstance -
一种确定构造函数对象是否将对象识别为其实例的方法。 使用者 运算符 . 符号.isConcatSpreadable -
一个布尔值,指示对象是否应展平为其数组元素。 使用者 Array.prototype.concat() . 符号标识符 -
返回对象的默认迭代器的方法。 使用者 用于。。。 属于 . 符号匹配 -
一种与字符串匹配的方法,也用于确定对象是否可以用作正则表达式。 使用者 String.prototype.match() . Symbol.match全部 -
返回迭代器的方法,该迭代器生成正则表达式对字符串的匹配。由使用 String.prototype.matchAll() . 符号.替换 -
替换字符串中匹配的子字符串的方法。由使用 String.protype.replacement() . 符号.搜索 -
返回与正则表达式匹配的字符串中的索引的方法。 使用者 String.prototype.search() . 符号.种类 -
用于创建派生对象的构造函数。 符号.split -
在与正则表达式匹配的索引处拆分字符串的方法。 使用者 String.prototype.split() . 符号.to原语 -
将对象转换为原语值的方法。 符号.to字符串标记 -
用于对象默认描述的字符串值。 使用者 Object.prototype.toString() . 符号.不透明度 -
对象值,其自身和继承的属性名称被排除在 具有 关联对象的环境绑定。
静态方法
符号.for() -
使用给定的 钥匙 并在找到时返回。 否则将创建一个新符号并注册到 钥匙 . 符号.keyFor() -
从给定符号的全局符号注册表检索共享符号键。
实例属性
符号.原型.结构 -
创建实例对象的构造函数。 对于 符号 实例,初始值为 符号 构造函数。 符号.原型.说明 -
包含符号描述的只读字符串。 Symbol.prototype[Symbol.toStringTag] -
的初始值 [Symbol.toStringTag] 属性是字符串 “符号” 。此属性用于 Object.prototype.toString() 然而,因为 符号 也有自己的 toString() 方法,除非调用 Object.prototype.toString.call() 符号为 这个Arg .
实例方法
Symbol.prototype.toString() -
返回包含符号描述的字符串。 覆盖 Object.prototype.toString() 方法。 Symbol.prototype.valueOf() -
返回符号。 覆盖 Object.prototype.valueOf() 方法。 符号原型[Symbol.toPrimitive]() -
返回符号。
示例
将typeof运算符与符号一起使用
符号类型()===“符号”; 符号类型(“foo”)===“Symbol”; 类型Symbol.iterator===“Symbol”;
符号类型转换
尝试将符号转换为数字时 类型错误 将被抛出 (例如。 +sym(对称) 或 符号|0 ). 使用松散等式时, 对象(sym)==sym 收益 真的 . 符号(“foo”)+“bar” 抛出一个 类型错误 (无法将符号转换为字符串)。 例如,这可以防止您从Symbol无声地创建新的字符串属性名称。 这个 “更安全” 字符串(sym) 转换 就像打电话给 Symbol.protype.toString() 带有符号,但请注意 新字符串(sym) 将投掷。
符号和用于。。。 在迭代中
常量对象={}; obj[符号(“a”)]=“a”; obj[Symbol.for(“b”)]=“b”; obj[“c”]=“c”; obj.d=“d”; for(obj中的常量i){ 控制台.log(i); } //“c”“d”
符号和JSON.stringify()
JSON.stringify({[符号(“foo”)]:“foo“}); // '{}'
作为属性键的符号包装器对象
const sym=符号(“foo”); 常量对象={[sym]:1}; 对象[符号];// 1 obj[对象(sym)];// 仍然是1
规格
浏览器兼容性
另请参见
Polyfill公司 符号 在里面 核心-js 类型 JavaScript数据类型和数据结构 ES6深入:符号 关于hacks.mozilla.org(2015)