1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
// symbol // 这种数据类型提供了独一无二的类型 { // 声明 let a1 = Symbol() let a2 = Symbol() console.log(a1 === a2);
let a3 = Symbol.for('a3')//这种声明方法,会先检查a3是否有全局声明,如果有返回a3,没有则返回Symbol let a4 = Symbol.for('a3')// 这个时候的a3是声明了的,所以返回的是之前声明过的a3 console.log(a3 === a4); } // false true
{ let a1 = Symbol.for('abc') let obj = { [a1]: '123', 'abc': '345', 'c': 456 } console.log(obj);
for(let [key,val] of Object.entries(obj)) { console.log(key, val); }
Object.getOwnPropertySymbols(obj).forEach(e => { console.log(e, obj[e]); })
Reflect.ownKeys(obj).forEach(e => { console.log(e, obj[e]); }) } //{abc: "345", c: 456, Symbol(abc): "123"} 这样申明的Symbol(abc)不会被覆盖,但是for in, let of 拿不到该属性
// abc 345 // c 456
// Symbol(abc) 123
// abc 345 // c 456 // Symbol(abc) 123
|
近期评论