JS中symbol的特點(diǎn)和用法詳解
Symbol 的特點(diǎn)如下:
- 唯一性:每個(gè)通過(guò) Symbol 函數(shù)創(chuàng)建的 Symbol 值都是唯一的,即使是通過(guò)相同的描述符創(chuàng)建的 Symbol,它們也是不相等的。
const symbol1 = Symbol('symbol');
const symbol2 = Symbol('symbol');
console.log(symbol1 === symbol2); // false在上述示例中,雖然 symbol1 和 symbol2 使用相同的描述符 'symbol' 創(chuàng)建,但它們是不相等的 Symbol 值。
- 用作對(duì)象屬性名:Symbol 值可以用作對(duì)象屬性名,由于每個(gè) Symbol 值都是唯一的,所以可以防止屬性名沖突的風(fēng)險(xiǎn)。
const symbolKey = Symbol('key');
const obj = {};
obj[symbolKey] = 'value';
console.log(obj[symbolKey]); // value在上述示例中,我們使用 Symbol 值作為對(duì)象 obj 的屬性名,確保了屬性名的唯一性。
- 屬性遍歷:Symbol 屬性默認(rèn)是不可枚舉的,不會(huì)出現(xiàn)在常規(guī)的對(duì)象遍歷方法(如
for...in、Object.keys()、Object.values()、Object.entries())中。這可以用于隱藏一些內(nèi)部實(shí)現(xiàn)細(xì)節(jié)或元數(shù)據(jù),使其在遍歷對(duì)象屬性時(shí)不可見(jiàn)。
const symbolKey = Symbol('key');
const obj = {
[symbolKey]: 'value',
regularProperty: 'regular value'
};
for (let key in obj) {
console.log(key); // regularProperty
}
console.log(Object.keys(obj)); // ['regularProperty']在上述示例中,使用 Symbol 定義了一個(gè)屬性 [symbolKey],它不會(huì)在遍歷對(duì)象屬性時(shí)被獲取到。
預(yù)定義的 Symbol 值:JavaScript 提供了一些預(yù)定義的 Symbol 值,用于表示語(yǔ)言內(nèi)部的特殊行為或元數(shù)據(jù)。其中一些常見(jiàn)的預(yù)定義 Symbol 值包括:
Symbol.iterator: 用于定義對(duì)象的默認(rèn)迭代器方法。Symbol.toStringTag: 用于自定義對(duì)象在調(diào)用Object.prototype.toString()時(shí)返回的字符串標(biāo)記。Symbol.species: 用于指定構(gòu)造函數(shù)在創(chuàng)建衍生對(duì)象時(shí)應(yīng)使用的構(gòu)造函數(shù)。
這些預(yù)定義的 Symbol 值可以在自定義對(duì)象或類(lèi)中使用,以改變其行為或提供額外的元數(shù)據(jù)。
class MyArray extends Array {
static get [Symbol.species]() {
return Array;
}
}
const arr = new MyArray(1, 2, 3);
const slicedArr = arr.slice(1, 2);
console.log(slicedArr instanceof MyArray); // false
console.log(slicedArr instanceof Array); // true在上述示例中,通過(guò)自定義類(lèi) MyArray 并覆蓋預(yù)定義的 Symbol.species,我們指定了在對(duì)數(shù)組進(jìn)行切片操作時(shí)返回的構(gòu)造函數(shù)應(yīng)為 Array,而不是 MyArray。這改變了數(shù)組切片操作的行為,使其返回一個(gè)標(biāo)準(zhǔn)的數(shù)組對(duì)象。
Symbol 提供了一種強(qiáng)大的機(jī)制來(lái)擴(kuò)展 JavaScript 對(duì)象的行為和功能,使我們能更靈活地操作和控制對(duì)象的屬性、遍歷方式和特殊行為。然而,由于 Symbol 的獨(dú)特性質(zhì)和某些特定使用場(chǎng)景,需要理解其用途和限制,避免濫用。
到此這篇關(guān)于JS中symbol的特性和用法詳解的文章就介紹到這了,更多相關(guān)JS symbol內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于element-ui?動(dòng)態(tài)換膚的代碼詳解
這篇文章主要介紹了element-ui?動(dòng)態(tài)換膚,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
靜態(tài)的動(dòng)態(tài)續(xù)篇之來(lái)點(diǎn)XML
靜態(tài)的動(dòng)態(tài)續(xù)篇之來(lái)點(diǎn)XML...2006-08-08
你必須了解的JavaScript中的屬性描述對(duì)象詳解(下)
JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述對(duì)象的屬性,控制它的行為,比如該屬性是否可寫(xiě)、可遍歷等等。這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)稱(chēng)為“屬性描述對(duì)象”。本文主要帶大家了解一下JavaScript中你必須了解的屬性描述對(duì)象,需要的可以參考一下2022-12-12
Bootstrap中g(shù)lyphicons-halflings-regular.woff字體報(bào)404錯(cuò)notfound的解
這篇文章主要介紹了 Bootstrap中g(shù)lyphicons-halflings-regular.woff字體報(bào)404錯(cuò)notfound的解決方法,需要的朋友可以參考下2017-01-01
js replace替換字符串同時(shí)替換多個(gè)方法
這篇文章主要介紹了js replace替換字符串同時(shí)替換多個(gè)方法 的相關(guān)資料,需要的朋友可以參考下2018-11-11
在layui中使用form表單監(jiān)聽(tīng)ajax異步驗(yàn)證注冊(cè)的實(shí)例
今天小編就為大家分享一篇在layui中使用form表單監(jiān)聽(tīng)ajax異步驗(yàn)證注冊(cè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
javascript中創(chuàng)建對(duì)象的三種常用方法
在javascript中創(chuàng)建對(duì)象的三種方法,腳本之家以前發(fā)布過(guò)有簡(jiǎn)單實(shí)例版的,大家可以參考下。2010-12-12

