摘要:新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值其他的數(shù)據(jù)類型包括基本知識注意不能使用,因?yàn)樗皇菍ο髤?shù)是一個(gè)對象,就會調(diào)用該對象的方法,然后才生成一個(gè)值值不可以運(yùn)算可以顯式轉(zhuǎn)為字符串可以轉(zhuǎn)為布爾值,但是不能轉(zhuǎn)為數(shù)值可以防止某一個(gè)鍵被改寫或覆蓋使用值定
新的原始數(shù)據(jù)類型:Symbol,表示獨(dú)一無二的值
其他的數(shù)據(jù)類型包括undefined,null,string,number,boolean,object
let s = Symbol() // 注意不能使用new,因?yàn)樗皇菍ο?typeof s // "symbol" let s1 = Symbol("foo") s1 // Symbol(foo) // Symbol參數(shù)是一個(gè)對象,就會調(diào)用該對象的toString()方法,然后才生成一個(gè)Symbol值 const obj = { toString() { return "abc" } } const sym = Symbol(obj) sym // Symbol(abc) let s2 = Symbol("foo") s1 === s2 // false // Symbol值不可以運(yùn)算 console.log("your symbol " + s1) // TypeError // Symbol可以顯式轉(zhuǎn)為字符串 String(s1) sym.toString() // "Symbol(foo)" // Symbol可以轉(zhuǎn)為布爾值,但是不能轉(zhuǎn)為數(shù)值 Boolean(s) // true !s // false Number(s) // TypeError
可以防止某一個(gè)鍵被改寫或覆蓋
使用Symbol值定義屬性時(shí),Symbol值必須放在方括號之中。
let mySym = Symbol() let a = {} a[mySym] = "hello" let a = { [mySym]: "hello" } // 注意點(diǎn)運(yùn)算符,此時(shí)mySym是字符串 a.mySym = "hello" a[mySym] // undefined a["mySym"] // "hello"
屬性名的遍歷
Symbol作為屬性名,不會出現(xiàn)在for...in和for...of循環(huán)中,也不會被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回,有一個(gè)Object.getOwnPropertySymbols方法可以獲取Symbol屬性名
let obj = {} let foo = Symbol("foo") Object.defineProperty(obj, foo, { value: "foobar" }) for (let i in obj) { console.log(i) // 無輸出 } Object.getOwnPropertyNames(obj) // [] Object.getOwnPropertySymbols(obj) // [Symbol(foo)]
還有一個(gè)全新的APIReflect.ownKeys()可以返回所有類型的鍵名,包括常規(guī)鍵名和Symbol鍵名
let obj = { [Symbol("my_key")]: 1, enum: 2, nonEnum: 3 } Reflect.ownKeys(obj) // ["enum","nonEnum",Symbol(my_key)]
let s1 = Symbol.for("foo") // 不會每次調(diào)用就返回一個(gè)新的Symbol類型的值 let s2 = Symbol.for("bar") // 調(diào)用30次,每次都返回同一個(gè)Symbol值,但是Symbol()會返回30個(gè)不同的Symbol值 s1 === s2 //true // 返回一個(gè)已登記的Symbol類型值的key let s1 = Symbol.for("foo") Symbol.keyFor(s1) // "foo" let s2 = Symbol("foo") Symbol.keyFor(s2) // undefined
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84903.html
摘要:前端技術(shù)日新月異,不斷有新技術(shù)出現(xiàn),我們就需要不斷地學(xué)習(xí)新知識,雖然已經(jīng)提出很久了,但是最近我才有時(shí)間靜下心來好好學(xué)習(xí)一下里面提出的新規(guī)則。 前端技術(shù)日新月異,不斷有新技術(shù)出現(xiàn),我們就需要不斷地學(xué)習(xí)新知識,雖然ES6已經(jīng)提出很久了,但是最近我才有時(shí)間靜下心來好好學(xué)習(xí)一下里面提出的新規(guī)則。今天總結(jié)下ES6提出的這個(gè)新的原始數(shù)據(jù)類型--Symbol。 為啥需要Symbol 一個(gè)新規(guī)則的提出...
摘要:可以通過調(diào)用方法將創(chuàng)建一個(gè)新的類型的值,這個(gè)值獨(dú)一無二,不與任何值相等。還可以使可擴(kuò)展,在中,表達(dá)式被標(biāo)準(zhǔn)化為構(gòu)造函數(shù)的一個(gè)方法,這意味著它是可擴(kuò)展的。 前端發(fā)展的太快了,快到ES6,ES7出來之后,今年已經(jīng)是ES8了,但是縱然前端發(fā)展很快,我們除了馬不停蹄的學(xué)習(xí)新的技術(shù)之外,也要沉下心來,好好的潛心磨礪自己,本文是整理了自己學(xué)習(xí)ES6之后相關(guān)的知識要點(diǎn),寄希望于書之于筆,一來自己可以...
摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...
摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...
閱讀 1211·2019-08-30 15:55
閱讀 961·2019-08-30 15:55
閱讀 2158·2019-08-30 15:44
閱讀 2891·2019-08-29 14:17
閱讀 1137·2019-08-29 12:45
閱讀 3312·2019-08-26 10:48
閱讀 3137·2019-08-23 18:18
閱讀 2610·2019-08-23 16:47