JS每日一題:Es6中新增的資料型別有哪些?使用場景?
20190125問:
Es6中新增的資料型別有哪些?使用場景?
es6中新增一種原始資料型別Symbol,最大的特點是唯一性,Symbol值通過Symbol函式生成, 在es5中物件的屬性都是字串,我們使用他人定義的物件,然後去新增自己的屬性,這樣容易起衝突覆蓋原有的屬性, Symbol也可以看成為一個字串,不過這個字元能保證是獨一無二的
基本示例:
// Object const obj = { name: 'JS' } obj.name = 'JS每日一題' // Symbol const name = Symbol('name') // 這裡的引數沒有特殊意義,可以看成為Symbol加了一個標記 obj[name] = 'JS每日一題'
Symbol用法
Symbol 目前有多種寫法
// 一 const title = Symbol() const obj = {} obj[title] = 'JS每日一題' // 二 const obj = { [title]: 'JS每日一題' } // 三 Object.defineProperty(obj, title, { value: 'JS每日一題'}) obj[title] // 輸出的結果都為JS每日一題 這裡注意一下,Symbol 做為屬性名時,不能用點去讀取 obj.title // undefined
Symbol作為屬性名,只有通過Object.getOwnPropertySymbols 方法返回
const attrs = Object.getOwnPropertySymbols(obj) // [Symbol[title]]
Symbol.for()
如果我們想要重複Symbol可以使用Symbol.for, Smybol.for()及Smybol()的區別在於Symbol.for()會先去查詢全域性下有沒有宣告過,如果有就返回該值,沒有就新建一個,Symbol()每一次呼叫都會新建一個
程式碼理解:
const title = Symbol.for('JS每日一題') ....Symbol.for('JS每日一題') //呼叫多次都是使用的第一次宣告的值 Symbol.for('JS每日一題')=== Symbol.for('JS每日一題')// true const title = Symbol('JS每日一題') Symbol('JS每日一題') === Symbol('JS每日一題') // false
總結
Symbol的特點
- 獨一無二
- 不能隱式轉換
- 不能與其它資料型別做運算
- 不能使用點運算子進行操作
ps: 今天答題的小夥伴多次都提到了map,set,,補充一下,新增的資料型別只有Symbol一種,map,set是新增的資料結構~_~
關於JS每日一題
JS每日一題可以看成是一個語音答題社群
每天利用碎片時間採用60秒內的語音形式來完成當天的考題
群主在次日0點推送當天的參考答案
- 注 絕不僅限於完成當天任務,更多是查漏補缺,學習群內其它同學優秀的答題思路