Symbol类型的注意点?

x33g5p2x  于2022-03-11 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(355)

一、Symbol函数前不能使用new,否则会报错

let s = new Symbol('ss')
console.log(s)
//TypeError: Symbol is not a constructor

二、Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转化为字符串时,比较容易区分。
三、Symbol作为属性,该属性不能出现在for…in,for…of循环中,也不会被Object.keys(),Object.getOwnPropertyNames(),JSON.stringify()返回

let s = Symbol(11)
let obj = {
  name:"dmc",
  age: 20,
  [s]: 'hhhh'
}
for(let i in obj) {
  console.log(i) 
}
//name,age
let s = Symbol(11)
let obj = {
  name:"dmc",
  age: 20,
  [s]: 'hhhh'
}
console.log(Object.keys(obj)) //['name', 'age']
let s = Symbol(11)
let obj = {
  name:"dmc",
  age: 20,
  [s]: 'hhhh'
}
console.log(Object.getOwnPropertyNames(obj)) //['name', 'age']
let s = Symbol(11)
let obj = {
  name:"dmc",
  age: 20,
  [s]: 'hhhh'
}
console.log(JSON.stringify(obj))

// {"name":"dmc","age":20}

四、Object.getOwnPropertySymbols方法返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值

let s = Symbol(11)
let obj = {
  name:"dmc",
  age: 20,
  [s]: 'hhhh'
}
console.log(Object.getOwnPropertySymbols(obj))
//[Symbol(11)]

五、Symbol.for 接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值。

let s = Symbol.for('hhh')
let s1 = Symbol.for('hhh')
console.log(s === s1) //true

六、Symbol.keyFor方法返回一个已登记的Symbol类型的值的key

let s = Symbol.for('hhh')
let s1 = Symbol.for('hhh')
console.log(Symbol.keyFor(s)) //hhh

相关文章