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 當前將要讀取的彙編...