✍️ 作者简介: 前端新手学习中。
💂 作者主页: 作者主页查看更多前端教学
🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习
Symbol类型具有唯一性。
let hd = Symbol();
let edu = Symbol();
console.log(hd == edu);//false
symbol类型是不能附加属性的,跟对象不一样。
hd.name = 'xiaoxie'
console.log(hd.name);//undefined
给创建的symbol变量添加描述
//添加描述
let hd = Symbol("坚毅的小解同志");
let edu = Symbol("csdn");
//获取描述
console.log(edu.description);//csdn
//添加描述第二种方法
//重复定义相同内容,指向的是同一个地址,不会产生新的占用 引用地址
let hd = Symbol.for("xiaoxie");
let edu = Symbol.for("xiaoxie");
console.log(hd == edu);//true
//获取描述
console.log(Symbol.keyFor(hd));//xiaoxie
重复命名 后面的会把前面的覆盖替换掉。
let grade = {
李四: { js: 100, css: 89 },
李四: { js: 20, css: 50 },
}
console.log(grade);//{ '李四': { js: 20, css: 50 } }
//对象使用变量需要加上【】
let user1 = '李四';
let user2 = '李四';
let grade = {
[user1]: { js: 100, css: 89 },
user2: { js: 20, css: 50 },
}
console.log(grade);//{ '李四': { js: 100, css: 89 }, user2: { js: 20, css: 50 } }
let user1 = {
name: "李四",
key: Symbol('李四')
};
let user2 = {
name: "李四",
key: Symbol()
};
let grade = {
[user1.key]: { js: 100, css: 89 },
[user2.key]: { js: 20, css: 50 },
}
console.log(grade[user1.key]);//{ js: 100, css: 89 }
console.log(grade);//{ [Symbol(李四)]: { js: 100, css: 89 }, [Symbol()]: { js: 20, css: 50 } }
循环遍历Symbol
//forin for of 遍历不到Symbol
for (const key in hd) {
console.log(key);//name
}
for (const iterator of Object.keys(hd)) {
console.log(iterator);//name
}
//便利Symbol类型
for (const iterator of Object.getOwnPropertySymbols(hd)) {
console.log(iterator);//Symbol(这是一个Symbol类型)
}
//遍历对象中的所有属性
for (const iterator of Reflect.ownKeys(hd)) {
console.log(iterator);//name
//Symbol(这是一个Symbol类型)
}