TypeScript symbol類型


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

⒈介紹及使用方式

  TypeScript中使用symbol類型和JavaScript的使用方式如出一轍,也是通過Symbol構造函數創建的。

let sym1 = Symbol();

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

  需要注意的是,Symbols是不可改變且唯一的。

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

let sym3 = Symbol("key");

console.log(sym2 === sym3); // false, symbols是唯一的

  通過同樣的方式生成兩個symbol也是不同的,因為symbol是唯一的,因此sym2和sym3無論如何都不會相等。

 

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

let sym = Symbol();

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

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

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

const getClassNameSymbol = Symbol();

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

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

  在實際開發中,常量使用symbol值最大的好處就是,其他任何值都不可能有相同的值了,因此可以保證諸如特定字面量或者特定的switch語句值可以按設計的方式工作。

⒉一些常用方法

  除了用戶定義的symbols,還有一些已經眾所周知的內置symbols。 內置symbols用來表示語言內部的行為。

Symbol.hasInstance

方法,會被instanceof運算符調用。構造器對象用來識別一個對象是否是其實例。

Symbol.isConcatSpreadable

布爾值,表示當在一個對象上調用Array.prototype.concat時,這個對象的數組元素是否可展開。

Symbol.iterator

方法,被for-of語句調用。返回對象的默認迭代器。

Symbol.match

方法,被String.prototype.match調用。正則表達式用來匹配字符串。

Symbol.replace

方法,被String.prototype.replace調用。正則表達式用來替換字符串中匹配的子串。

Symbol.search

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

Symbol.species

函數值,為一個構造函數。用來創建派生對象。

Symbol.split

方法,被String.prototype.split調用。正則表達式來用分割字符串。

Symbol.toPrimitive

方法,被ToPrimitive抽象操作調用。把對象轉換為相應的原始值。

Symbol.toStringTag

方法,被內置方法Object.prototype.toString調用。返回創建對象時默認的字符串描述。

Symbol.unscopables

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM