symbol 的前世今生

2021-10-12 06:53:45 字數 1087 閱讀 7668

es5 的物件屬性名都是字串,這容易造成屬性名的衝突。比如,你使用了乙個他人提供的物件,但又想為這個物件新增新的方法(mixin 模式),新方法的名字就有可能與現有方法產生衝突。如果有一種機制,保證每個屬性的名字都是獨一無二的就好了,這樣就從根本上防止屬性名的衝突。這就是 es6 引入symbol的原因。

是第7種資料型別: string/number/undefiend/null/boolearn/object/symbol

symbol 值通過symbol函式生成

可以轉為字串  string(sym)   sym.tostring() // "symbol(foo)" / / 'symbol(my symbol)'  

顯式轉為字串

const sym = symbol('foo');

sym.description // "foo"

可以隱式轉為 boolearn     但是不能轉為數字

由於以 symbol 值作為鍵名,不會被常規方法遍歷得到。我們可以利用這個特性,為物件定義一些非私有的、但又希望只用於內部的方法。

簡單的單例模式如下** 把

例子放到頂層物件

例項放到頂層物件global 中

function a()

if (!global._foo)

module.exports = global._foo;

但是存在問題

._foo;

是很容易被改變的

global._foo = ;

就改了_foo

更像是字串的變種

(定製版加強版)!

LinkedList前世今生

1 linkedlist元素在內部儲存的實現,節點定義即指向前一元素的指標,後一元素的指標,當前元素的值。private static class entry 2 建立乙個空鍊錶。預設有個頭指標header。private transient entryheader new entry null,n...

前世今生 STL

嘛,string就是乙個用於字串處理的標準類庫,但是需要注意的是其速度可能會比直接操縱char陣列要慢一些。reverse這個方法是我一直都想找到但是沒有找到的,在判斷回文的時候格外好用。string s abcdef string ss s ss abcdef reverse ss.begin s...

位址 前世今生

alu arithemetic and logic unit 書面意思是 算術與邏輯部件,運算器,算術與邏輯單元,通俗來講 cpu處理的資料位數。從4位 8位 16位 32位,處理能力越來越強。發問 16位計算能力如何處理20位的位址呢?cs ip 是一組暫存器,用於告知 cpu 當前將要讀取的彙編...