网站制作用的软件,建e网全景制作教程视频,做网站优化的话术,中小企业网站建设如何Symbol
数据类型Symbol#xff0c;表示独一无二的值。
对象的属性名可有两种类型#xff0c;一种是原来的字符串#xff0c;另一种是新增的 Symbol 类型
可以保证不与其他属性名产生冲突。
let s1 Symbol()
let s2 Symbol()
console.log(s1, s2, s1 s2)//Symbol() Sy…Symbol
数据类型Symbol表示独一无二的值。
对象的属性名可有两种类型一种是原来的字符串另一种是新增的 Symbol 类型
可以保证不与其他属性名产生冲突。
let s1 Symbol()
let s2 Symbol()
console.log(s1, s2, s1 s2)//Symbol() Symbol() false可以接受一个字符串作为参数表示对 Symbol 实例的描述
let s1 Symbol(foo);如果 Symbol 的参数是一个对象就会调用该对象的toString方法
const obj {toString() {return abc;}
};
const sym Symbol(obj);
sym // Symbol(abc)Symbol.prototype.description
读取Symbol的描述
const sym Symbol(foo)
sym.description //foo作为属性名
let mySymbol Symbol();
let a {};a[mySymbol] Hello!;
let a {let a {};};
let a {};Object.defineProperty(a, mySymbol, { value: Hello! });属性名的遍历
Symbol 作为属性名遍历对象的时候该属性不会出现在for...in、for...of循环中也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回
Object.getOwnPropertySymbols()方法可以获取指定对象的所有 Symbol 属性名。该方法返回一个数组成员是当前对象的所有用作属性名的 Symbol 值。
const objectSymbols Object.getOwnPropertySymbols(obj);Reflect.ownKeys()方法可以返回所有类型的键名包括常规键名和 Symbol 键名
let obj {[Symbol(my_key)]: 1,enum: 2,nonEnum: 3
};
Reflect.ownKeys(obj)
// [enum, nonEnum, Symbol(my_key)]Symbol.for()
Symbol(cat)每次调用都会返回一个新的值。
Symbol.for()会先检查给定的key是否已经存在存在每次都会返回同一个 Symbol 值如果不存在才会新建一个值。
Symbol.for(bar) Symbol.for(bar)// trueSymbol(bar) Symbol(bar)
// false由于Symbol()写法没有登记机制所以每次调用都会返回一个不同的值。 Symbol.keyFor()
Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key。
let s1 Symbol.for(foo);
Symbol.keyFor(s1) // foolet s2 Symbol(foo);
Symbol.keyFor(s2) // undefined注意Symbol.for()为 Symbol 值登记的名字是全局环境的不管有没有在全局环境运行。