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)