Symbol in js

// 對象的屬性鍵只能是string類型和symbol類型
// “Symbol”值代表用給定名稱作爲唯一標識
// 存在系統級symbol
// 用於區別對待對內操作和對外選擇性輸出
// let id = Symbol('id')
// let ids = Symbol('id')
// console.log(id)
// console.log(ids)
// console.log(id == ids)

let testObj = {
  name: 'test'
}
//
let testId = Symbol('id')
testObj[testId] = 'test_id'
console.log(testObj[testId])


let user = { name: "John" };
let id = Symbol("id");
user[id] = "ID Value";
console.log(user[id]);


let age = Symbol('age')
let symbolObj = {
  gender: 'girl',
  [age]: 12, // 這是symbol對象鍵
  years: 14 // 這是普通的字符串鍵
}

let allKeys = Reflect.ownKeys(symbolObj) // 返回對象的全部鍵(包括字符串鍵名和symbol鍵名),以數組形式返回
console.log('全部鍵')
console.log(allKeys)
console.log(symbolObj)

let allSymbols = Object.getOwnPropertySymbols(symbolObj) // 返回對象中所有symbol鍵名,以數組形式
console.log('全部symbol鍵')
console.log(allSymbols)

// 用for in遍歷不到symbol鍵
// JSON.stringify()時候也將symbol排除在外
for (let i in symbolObj) {
  console.log(i)
}


// 通過全局Symbol註冊能實現兩個名字相同的symbol是同樣的 Symbol.for(name)
let name1 = Symbol.for('name') // name1是全局symbol
let name2 = Symbol.for('name')
console.log(name1 == name2) // true


let keyName = Symbol.keyFor(name2)
console.log(keyName) // 通過symbol對象名字找symbol鍵名,找不到返回undefined,只對全局symbol好使
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章