// 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