SOURCE

// Symbol  Symbol创建的值独一无二,相同参数的Symbol返回的值也是不同的
let s1 = Symbol('iu')
let s2 = Symbol('iu')
console.log(s1 === s2)  // false


// 一、对象中添加 Symbol属性
let obj = {}
let s3 = Symbol('lisa')

// ①、这里不能使用点语法,需要用中括号(Symbol创建的是一个变量)
obj[s3] = 'lisa'


// ②、直接往对象里添加属性
let obj1 = {
    [s3]:'iu'  // 这里的 s3 需要用中括号包裹,否则不会被识别为变量
}

// ③、利用Object.defineproperty(obj,key,{value:""}) 来添加属性
let s4 = Symbol('yoona')
Object.defineProperty(obj1,s4,{value:'yoona',writable:true})

console.log(obj) // {Symbol(lisa): "lisa"}
console.log(obj1)  // {Symbol(lisa): "iu", Symbol(yoona): "yoona"}

// 二、 Symbol.for 创建的变量
let s5 = Symbol.for('iu')
let s6 = Symbol.for('iu')
console.log(s5 === s6)  //  true

// 三、属性的遍历
let fun = {
    a:1,
    b:2,
   [Symbol('iu')]:3
}

// Object.keys  返回一个由所有可枚举的属性组成的数组
console.log(Object.keys(fun))  // ["a","b"]

// for of 没有迭代器 iterable,无法使用for of
// for(let val of fun) {
//     console.log(val)
// }

// for in 返回可枚举属性的每一项
for(let val in fun) {
    console.log(val) //  a  b
}

// JSON.stringify() 返回一个由所有可枚举属性的键值对组成的数组
console.log(JSON.stringify(fun))  // [a:1,b"2]

// 使用独有的api去获取 Symbol类型属性
console.log(Object.getOwnPropertySymbols(fun))  // [Symbol(iu)]
console 命令行工具 X clear

                    
>
console