symbol的學習參考了以下大大們的部落格~僅為自己的學習筆記。
在es5中,物件的屬性都是字串,很容易引起命名衝突的問題。如果你寫乙個物件,需要有一些屬性名你不想別人誤操作或修改,則可以借助symbol來完成。
symbol為es6引入的第七種資料型別,也是原始資料型別。表示獨一無二的值。
乙個symbol型別的資料可以用symbol函式建立,但注意由於不是物件,不能使用new!
let s1 =
symbol()
console.
log(
typeof
(s1)
)//symbol
symbol函式可以接收乙個字串作為引數,傳入的字串是對symbol的描述。方便我們區分。
let s2 =
symbol
("s"
)
由於傳入的字串僅為描述,所以即使傳入相同的描述,symbol建立出來的資料仍然是獨一無二的。
let s3 =
symbol
("s"
)console.
log(s2 == s3)
//false
console.
log(s2 === s3)
//false
symbol函式還可以接收乙個物件作為引數,但是會先呼叫物件的tostring()方法,並將其返回值作為對symbol的描述。
let obj =
}let s4 =
symbol
(obj)
console.
log(s4)
//symbol(cjx)
有時如果你想要檢視乙個symbol資料的描述,可以使用description方法,具體如下
let obj =
}let s4 =
symbol
(obj)
console.
log(s4.description)
//cjx
由於symbol這獨一無二的特性,所以symbol值我們一般用做物件的屬性值。具體的寫法如下:
let name =
symbol
("name"
)let age =
symbol
("age"
)let gender =
symbol
("gender"
)let obj =
//第二種寫法
obj[age]=18
//第三種寫法
注意:使用symbol的值做屬性的時候,不能使用.屬性名來訪問,應使用來訪問。如上例中,如果這樣寫會取不到
console.
log(
"不應用.訪問"
,obj.name)
console.
log(
"應使用訪問"
,obj[name]
)
使用symbol 值作為屬性名時,該屬性是公有屬性不是私有屬性。
但要注意,使用for…in, for…of無法遍歷到以symbol值作為屬性名的屬性。
console.
log(
"----for in----"
)for
(let key in obj)
console.
log(
"----getownpropertysymbols----"
)let symbolattr = object.
getownpropertysymbols
(obj)
//返回乙個陣列
從上面我們可以看到,使用for…in方法只能遍歷到非symbol值的屬性。使用getownpropertysymbols只能獲取到symbol值的屬性。使用reflect.ownkeys可以獲取到所有共有屬性。
symbol 作為屬性名,該屬性不會出現在for…in、for…of迴圈中,也不會被object.keys()、object.getownpropertynames()、json.stringify()返回。
symbol.for()接受乙個字串作為引數,然後搜尋有沒有以該引數作為名稱的symbol值。如果有,就返回這個symbol值,否則就新建這樣乙個symbol值。
let s1 = symbol.
for(
's')
let s2 = symbol.
for(
's')
console.
log(s1===s2)
//true
這裡還引入了乙個登記機制的概念。使用symbol.for建立的會被登記在全域性環境中供搜尋,而使用symbol建立的不會被登記。
symbol.keyfor()方法會返回乙個已登記的symbol型別值的key,如:
let s1 =
symbol
("s"
)let s2 = symbol.
for(
"s")
console.
log(
"未登記"
,symbol.
keyfor
(s1)
) console.
log(
"登記"
,symbol.
keyfor
(s2)
)
es6 學習筆記(二)Symbol
symbol類似於enum,可以起到識別符號的作用。主要可以應用在一下場景。1.可以作為屬性名 var mysymbol symbol var a a.mysymbol hello a mysymbol undefined a mysymbol hello 要注意symbol值作為物件屬性名時,不能...
ES6 新增的型別Symbol
symbol 是es6中新增的一種資料型別,是唯一的識別符號,可以作為物件的唯一屬性名 symbol 可以代替乙個常量,指的常量的值唯一 symbol 的特點 唯一性 即使兩個變數型別,值都一樣,也不相等 let id1 symbol id let id2 symbol id console.log...
ES6個人筆記記錄 Symbol
es5 的物件屬性名都是字串,這容易造成屬性名的衝突 比如,我們使用了乙個他人提供的物件,但又想為這個物件新增新的方法cmixin 模式 新方法的名字就有可能與現有方法產生衝突。es6引入了一種新的原始資料型別symbol,表示獨一無二的值 是第七種資料型別 1.number 2.string 3....