'類型轉(zhuǎn)換'是'JS'語言重要的一部分荞怒,能夠非常靈活地將一種'數(shù)據(jù)類型'轉(zhuǎn)換為另一種浑彰。然而'Symbol類型'在進(jìn)行轉(zhuǎn)換時(shí)非常不靈活,因?yàn)槠渌愋腿狈εc
Symbol
值的合理等價(jià)退唠,尤其是Symbol
無法被轉(zhuǎn)換為字符串值或數(shù)值'葬燎。
String()轉(zhuǎn)換
雖然說上面說不可以轉(zhuǎn)換,其實(shí)只能轉(zhuǎn)換成 Symbol(uid)
這種形式拌汇,想取到'描述內(nèi)容'需要手動(dòng)截取'描述內(nèi)容'
let uid = Symbol.for("uid"), // 創(chuàng)建全局私有屬性
test = Symbol('呵呵噠'), // 創(chuàng)建局部私有屬性
desc = String(uid), // 轉(zhuǎn)換成字符串
testString = String(test) // 轉(zhuǎn)換成字符串
console.log(desc) // "Symbol(uid)"
console.log(testString) // "Symbol(呵呵噠)"
強(qiáng)制類型轉(zhuǎn)換
將 uid
與空字符串相連接柒桑,會(huì)首先要求把 uid
轉(zhuǎn)換為一個(gè)字符串,而這會(huì)引發(fā)錯(cuò)誤噪舀,從而阻止了轉(zhuǎn)換行為魁淳。
let uid = Symbol.for("uid"),
desc = uid + ""; // 引發(fā)錯(cuò)誤!
相似地傅联,你不能將 Symbol
轉(zhuǎn)換為數(shù)值先改,對(duì) Symbol
使用所有數(shù)學(xué)運(yùn)算符都會(huì)引發(fā)錯(cuò)誤,例如:
let uid = Symbol.for("uid"),
sum = uid / 1; // 引發(fā)錯(cuò)誤蒸走!
此例試圖把 Symbol
除以 1 仇奶,同樣引發(fā)了錯(cuò)誤。無論對(duì) Symbol
使用哪種數(shù)學(xué)運(yùn)算符都會(huì)導(dǎo)致錯(cuò)誤比驻,但使用
邏輯運(yùn)算符則不會(huì)该溯,因?yàn)?Symbol
在邏輯運(yùn)算中會(huì)被認(rèn)為等價(jià)于 true
(就像 JS
中其他的非空值那樣)。