概念以及引入的原因
let a = { a: 1 } ;
let b = { b: 2 } ;
let c = { } ;
c[ a] = 3 ;
c[ b] = 4 ;
console. log ( c) ;
let s = Symbol ( )
console. log ( typeof s) ;
接收字符串作为参数
let s1 = Symbol ( 'a' )
let s2 = Symbol ( 'b' )
console. log ( s1) ;
console. log ( s2) ;
console. log ( s1. toString ( ) ) ;
console. log ( s2. toString ( ) ) ;
let s3 = Symbol ( { } )
console. log ( s3) ;
let s4 = Symbol ( )
let s5 = Symbol ( ) ;
console. log ( s4 === s5) ;
let s6 = Symbol ( 'a' )
let s7 = Symbol ( 'a' ) ;
console. log ( s6 === s7) ;
不能与其他类型的值进行计算
let sym = Symbol ( 'my Symbol' )
'my symbol is' + sym
Symbol可以显示转化为字符串
let s1 = Symbol ( 'a' )
let s2 = Symbol ( 'b' )
console. log ( s1) ;
console. log ( s2) ;
console. log ( s1. toString ( ) ) ;
console. log ( String ( s1) ) ;
Symbol可以转为布尔值 但是不能转化成数值
let symb = Symbol ( ) ;
console. log ( ! Boolean ( symb) ) ;
Symbol.iterator 属性
对象的Symbol. iterator属性 指向该对象的默认遍历器的方法 for ... of 循环的时候会调用Symbol. iterator
Object.getOwnPropertySymbols()
const obj = { } ;
let sym1 = Symbol ( 'a' )
let sym2 = Symbol ( 'b' )
obj[ sym1] = 'hello'
obj[ sym2] = 'world'
const arr = Object. getOwnPropertySymbols ( obj)
console. log ( arr) ;
作用实例 常量枚举 私有属性
const private = Symbol ( 'private' )
const obj = {
_name: '张三' ,
[ private ] : '私有的属性'
}
console. log ( Object. keys ( obj) ) ;