symbol 是一种基本数据类型能作为对象属性的唯一标识符;这是该数据类型仅有的目的。
尝试将一个 symbol 值转换为一个 number 值时,会抛出一个 TypeError 错误 (e.g. +sym or sym | 0).
使用宽松相等时, Object(sym) == sym returns true.
这会阻止你从一个 symbol 值隐式地创建一个新的 string 类型的属性名。例如,Symbol("foo") + "bar" 将抛出一个 TypeError (can‘t convert symbol to string).
在 for...in 迭代中不可枚举
String(sym)的作用会像symbol类型调用 Symbol.prototype.toString() 一样
当使用 JSON.strIngify() 时以 symbol 值作为键的属性会被完全忽略
JSON.stringify({[Symbol("foo")]: "foo"});
// ‘{}‘
当一个 Symbol 包装器对象作为一个属性的键时,这个对象将被强制转换为它包装过的 symbol 值
var sym = Symbol("foo");
var obj = {[sym]: 1};
obj[sym]; // 1
obj[Object(sym)]; //1
obj.sym //underfine
var obj = {sym: 1};
obj[sym] //underfine
obj.sym //1
Symbol([description])
description 可选的,用一个字符串(可省略)作为其描述。symbol的description可以用于调试,但无法访问到symbol本身。
var sym1 = Symbol();
var sym2 = Symbol(‘foo‘);
var sym3 = Symbol(‘foo‘);
Symbol("foo") === Symbol("foo"); // false
使用 new 运算符的语法将会抛出一个 TypeError 错误,因为围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。然而,现有的原始包装器对象,如 new Boolean、new String以及new Number因为遗留原因仍可被创建。
var sym = new Symbol(); // TypeError
Symbol.length
长度属性值为0。
Symbol.prototype
描述symbol构造函数的原型
Symbol.iterator
一个返回一个对象默认迭代器的方法。使用 for...of。
typeof Symbol.iterator === ‘symbol‘
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.constructor
返回创建实例原型的函数. 默认为 Symbol 函数。
Symbol.prototype.toString()
返回包含Symbol描述符的字符串。 覆盖Object.prototype.toString() 方法。
Symbol.prototype.valueOf()
返回 Symbol 对象的初始值.。覆盖 Object.prototype.valueOf() 方法。
Symbol.prototype[@@toPrimitive]
返回Symbol对象的初始值。
原文地址:https://www.cnblogs.com/qq3279338858/p/8900476.html