JS每日一題:Es6中新增的數據類型有哪些?使用場景?

20190125問:

Es6中新增的數據類型有哪些?使用場景?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 方法返回es5

const attrs = Object.getOwnPropertySymbols(obj)

// [Symbol[title]]

Symbol.for()

若是咱們想要重複Symbol可使用Symbol.for, Smybol.for()及Smybol()的區別在於Symbol.for()會先去查找全局下有沒有聲明過,若是有就返回該值,沒有就新建一個,Symbol()每一次調用都會新建一個code

代碼理解:cdn

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點推送當天的參考答案get

  • 注 毫不僅限於完成當天任務,更可能是查漏補缺,學習羣內其它同窗優秀的答題思路

點擊加入答題

相關文章
相關標籤/搜索