還是大劍師蘭特:曾是美國某知名大學(xué)計(jì)算機(jī)專業(yè)研究生,現(xiàn)為航空航海領(lǐng)域高級前端工程師;CSDN知名博主,GIS領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技術(shù)開發(fā),歡迎加底部微信(gis-dajianshi),一起交流。
No. | 內(nèi)容鏈接 |
---|---|
1 | Openlayers 【入門教程】 - 【源代碼+示例300+】 |
2 | Leaflet 【入門教程】 - 【源代碼+圖文示例 150+】 |
3 | Cesium 【入門教程】 - 【源代碼+圖文示例200+】 |
4 | MapboxGL【入門教程】 - 【源代碼+圖文示例150+】 |
5 | 前端就業(yè)寶典 【面試題+詳細(xì)答案 1000+】 |
一、ES6 Symbol 基本介紹
Symbol 是 ECMAScript 6 引入的一種新的原始數(shù)據(jù)類型,它是不可變且唯一的。
這意味著每次調(diào)用 Symbol()
函數(shù)都會創(chuàng)建一個獨(dú)一無二的值,即使傳入相同的描述符也是如此。
// 創(chuàng)建 Symbol
let sym1 = Symbol('description1'); // description1僅為描述信息,不影響符號的唯一性
let sym2 = Symbol('description1');
console.log(sym1 === sym2); // 輸出: false
// typeof檢查
console.log(typeof sym1); // 輸出: "symbol"
代碼示例:
// 創(chuàng)建Symbol
let id = Symbol();
let myObj = {};
myObj[id] = 'This is a unique value';
console.log(myObj[id]); // 輸出: "This is a unique value"
// 描述符
let symWithDesc = Symbol('description');
console.log(symWithDesc.description); // TypeError: Cannot read property 'description' of a non-object
// Symbol.keyFor() 方法查找已注冊的 Symbol 類型的鍵
let globalSym = Symbol.for('globalKey');
console.log(Symbol.keyFor(globalSym)); // 輸出: "globalKey"
// 注意,Symbol.for() 會查找全局 Symbol 注冊表,確保同一描述符的 Symbol 在全局范圍內(nèi)是唯一的
let anotherGlobalSym = Symbol.for('globalKey');
console.log(anotherGlobalSym === globalSym); // 輸出: true
二、使用場景
- 唯一標(biāo)識符:由于 Symbol 值的唯一性,常常被用來作為對象的唯一屬性名,防止屬性沖突。
let myPrivateProp = Symbol('private');
class MyClass {
constructor(value) {
this[myPrivateProp] = value;
}
get secretValue() {
return this[myPrivateProp];
}
}
-
模塊系統(tǒng):在某些模塊系統(tǒng)或庫中,Symbol 可用于創(chuàng)建私有或隱式接口。
-
Map和Set鍵:Symbol 可以作為 Map 和 Set 的鍵,這樣就不會與其他數(shù)據(jù)類型的鍵產(chǎn)生沖突。
-
內(nèi)置 Symbol:ES6 提供了一些內(nèi)置的 Symbol 值,如
Symbol.iterator
用于對象的迭代器方法。文章來源:http://www.zghlxwxcb.cn/news/detail-855723.html
let arr = ['a', 'b', 'c'];
let iterator = arr[Symbol.iterator]();
console.log(iterator.next().value); // 輸出: 'a'
三、用途總結(jié)
Symbol 主要用于解決命名沖突的問題,特別是在編寫大型應(yīng)用或庫時,可以幫助開發(fā)者避免無意間覆蓋或訪問到對象的內(nèi)部屬性。同時,它也為 JavaScript 提供了一種實(shí)現(xiàn)私有屬性的間接途徑。
文章來源地址http://www.zghlxwxcb.cn/news/detail-855723.html
到了這里,關(guān)于ES6 中 Symbol 怎么用?示例詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!