码迷,mamicode.com
首页 > 其他好文 > 详细

Symbol

时间:2020-07-30 14:24:11      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:声明   保护   esc   rip   desc   ons   应用   魔术   sdn   

Symbol

一种新的原始数据类型,Symbol不是一个对象,不可以new

Symbol的声明方式:

const s1 = Symbol(s1)
const s2 = Symbol(s1)
console.log(typeof s1)
console.log(s1 === s2)  // false
console.log(s1.description) // s1
console.log(Symbol.keyFor(s1)) //undefined
const s3 = Symbol.for(s3)
const s4 = Symbol.for(s3)
console.log(s3 === s4)  // true
console.log(s3.description) //s3
console.log(Symbol.keyFor(s3)) //s3

Symbol的应用场景:

// 把Symbol作为对象的key,可以保证当前的key不冲突
const stu1 = Symbol(‘zs‘)
const stu2 = Symbol(‘zs‘)
const student = {
  [stu1]: { class: 1, num: 2, major: ‘code‘},
  [stu2]: { class: 1, num: 3, major: ‘code‘}
}
console.log(student[stu1]) // {class: 1, num: 2, major: "code"}
console.log(student[stu2]) // {class: 1, num: 3, major: "code"}
//在一定程度上可以保护对象属性(感觉像是私有属性的亚子)
const tel = Symbol(‘tel‘)
class Student {
  constructor(name){
    this.name = name
    this[tel] = ‘111‘
  }
  getIfo(){
    return this.name + this[tel]
  }
}
const s1 = new Student(‘zs‘)
console.log(s1.getIfo()) // zs111

// 只能遍历不是Symbol的属性
for(let key in s1){
  console.log(key) // name
}
// 只能遍历不是Symbol的属性
for(let key of Object.keys(s1)){
  console.log(key) // name
}
// 只能遍历是Symbol的属性
for(let key of Object.getOwnPropertySymbols(s1)){
  console.log(key) // Symbol(‘tel‘)
}
// 都可以
for(let key of Reflect.ownKeys(s1)){
  console.log(key) // name   Symbol(‘tel‘)
}

消除魔术字符串:https://blog.csdn.net/ixygj197875/article/details/79165190

Symbol

标签:声明   保护   esc   rip   desc   ons   应用   魔术   sdn   

原文地址:https://www.cnblogs.com/Momentt/p/13403081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!