TypeScript Symbols

2022-04-21 09:21 更新

自ECMAScript 2015起,symbol成為了一種新的原生類型,就像numberstring一樣。

symbol類型的值是通過Symbol構(gòu)造函數(shù)創(chuàng)建的。

let sym1 = Symbol();

let sym2 = Symbol("key"); // 可選的字符串key

Symbols是不可改變且唯一的。

let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, symbols是唯一的

像字符串一樣,symbols也可以被用做對象屬性的鍵。

let sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"

Symbols也可以與計算出的屬性名聲明相結(jié)合來聲明對象的屬性和類成員。

const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

眾所周知的Symbols

除了用戶定義的symbols,還有一些已經(jīng)眾所周知的內(nèi)置symbols。 內(nèi)置symbols用來表示語言內(nèi)部的行為。

以下為這些symbols的列表:

Symbol.hasInstance

方法,會被instanceof運算符調(diào)用。構(gòu)造器對象用來識別一個對象是否是其實例。

Symbol.isConcatSpreadable

布爾值,表示當(dāng)在一個對象上調(diào)用Array.prototype.concat時,這個對象的數(shù)組元素是否可展開。

Symbol.iterator

方法,被for-of語句調(diào)用。返回對象的默認(rèn)迭代器。

Symbol.match

方法,被String.prototype.match調(diào)用。正則表達(dá)式用來匹配字符串。

Symbol.replace

方法,被String.prototype.replace調(diào)用。正則表達(dá)式用來替換字符串中匹配的子串。

Symbol.search

方法,被String.prototype.search調(diào)用。正則表達(dá)式返回被匹配部分在字符串中的索引。

Symbol.species

函數(shù)值,為一個構(gòu)造函數(shù)。用來創(chuàng)建派生對象。

Symbol.split

方法,被String.prototype.split調(diào)用。正則表達(dá)式來用分割字符串。

Symbol.toPrimitive

方法,被ToPrimitive抽象操作調(diào)用。把對象轉(zhuǎn)換為相應(yīng)的原始值。

Symbol.toStringTag

方法,被內(nèi)置方法Object.prototype.toString調(diào)用。返回創(chuàng)建對象時默認(rèn)的字符串描述。

Symbol.unscopables

對象,它自己擁有的屬性會被with作用域排除在外。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號