1.Symbol类型
let a1:symbol = Symbol(1) // 唯一的
let a2:symbol = Symbol(1) // 唯一的// for Symbol for全局symbol有没有注册过这个key,如果有直接拿来用,如果没有的话他就会创建一个
// console.log(Symbol.for('heming')===Symbol.for('heming'))let obj ={name:1,[a1]:111,[a2]:222
}
// console.log(obj)// for in 不能读到symbol
// for(let key in obj){
// console.log(key)
// }
// 不能读到symbol
// console.log(Object.keys(obj))
// 不能读到symbol
// console.log(Object.getOwnPropertyNames(obj))//可以读到但是其他属性丢失
// console.log(Object.getOwnPropertySymbols(obj))
// 可以取到
// console.log(Reflect.ownKeys(obj))
2.生成器
//3.迭代器
// 4.set map// let set:Set<number> = new Set([1,2,3,3,2,6]) // 天然去重的
// console.log(set,'set')let map:Map<any,any> = new Map()let Arr2 = [1,2,3]
map.set(Arr2,'鹤鸣')
// console.log(map.get(Arr2))function args(){console.log(arguments,'args') // 伪数组
}// let list = document.querySelectorAll('div') // 伪数组// const each= (value:any)=>{
// let It:any = value[Symbol.iterator]()
// let next:any = {done:false}
// while (!next.done){
// next = It.next()
// if(!next.done){
// console.log(next.value)
// }
// }
// }
//
// each(map)
// for(let value of map){
// console.log(value,'value')
// }// 5.迭代器的语法糖 for of
// 6.for of 对象不能使用,因为没有 iterator
// 7.解构 底层原理也是去调用 iterator
// 8.对象支持for of
// let [a,b,c] = [4,5,6]
// let a = [4,5,6]
// let copy = [...a]
// console.log(a)let obj = {max:5,current:0,[Symbol.iterator](){return {max:this.max,current: this.current,next(){if(this.current == this.max){return {value:undefined,done:true}}else{return {value:this.current++,done:false}}}}}
}// for(let value of obj){
// console.log(value)
// }// let x = [...obj]
let x = {...obj}
console.log(x)