内置Symbol
foo instanceOf Foo
// 实际调用
Foo[Symbol.hasInstance](foo)
- Symbol.isConcatSpreadable,在进行concat操作时,遇到数组或者类数组对象是否展开,true/展开,false/不展开,数组默认展开,类数组对象默认不展开
- Symbol.species 创建衍生对象时,使用的构造函数
class MyArray extends Array {}
const a = new MyArray(1, 2, 3);
const b = a.map(x => x);
b instanceof MyArray // true
b instanceof Array // true
class MyArray2 extends Array {
static get [Symbol.species]() { return Array; }
}
const a2 = new MyArray2();
const b2 = a2.map(x => x);// b2是创建的衍生对象
b2 instanceof MyArray // false
b2 instanceof Array // true
- Symbol.match,Symbol.replace,Symbol.search,Symbol.split,正则表达式对象部署这几个属性,在进行对应操作时调用相应属性指向的方法
- Symbol.iterator 指向遍历器,部署这个属性的对象都可遍历
- Symbol.toPrimitive 对象转成数字或者字符串时调用
let obj = {
[Symbol.toPrimitive](hint) {
switch (hint) {
case 'number':
return 123;
case 'string':
return 'str';
case 'default':
return 'default';
default:
throw new Error();
}
}
};
2 * obj // 246
3 + obj // '3default'
obj == 'default' // true
String(obj) // 'str'
- Symbol.toStringTag 对象调用toString时定制返回名称
[Object xxx]
- Symbol.unscopables 使用with命令时,排除的对象属性