// 通過for...in 無法遍歷到Symbol屬性 for ( let key in user){ console . log (key) // name }
// 同樣不能獲取到Symbol屬性 for ( let key ofObject . keys (user)){ console.log (key) // name } // 只能取到Symbol屬性 for ( let key ofObject . getOwnPropertySymbols (user)){ console.log (key) // Symbol(AILI) }
// 即能獲取到普通屬性,又能獲取到Symbol屬性 for ( let key ofReflect . ownKeys (user)){ console.log (key) // name Symbol(AILI) }
應用三:消除魔法字符串(比較長或者難以辨認,容易出錯的字符串)
真實開發情況
1 2 3 4 5 6 7 8 9 10 11 12 13
functiongetArea(shape){ let area = 0 switch(shape){ case"Triangle": area = 1 break case"Circle": area = 2 break } return area } console.log(getArea("Triangle")) // 1
可以修改為下方情況
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// 在這個函數中,【Triangle】和【Circle】已經不重要,只要區分開即可,利用Symbol不一致性 const shapeType = { triangle : Symbol (), circle : Symbol () } functiongetArea ( shape ){ let area = 0 switch (shape){ case shapeType.triangle : area = 1 break case shapeType.circle : area = 2 break } return area } console.log(getArea (shapeType.triangle )) // 1