JS宣告定義Symbol的幾種方式及簡單應用

2021-10-25 02:14:14 字數 2377 閱讀 7911

首先,我們先來談談,什麼是symbol呢?symbol是es6新增的一種資料型別

那麼這種資料型別到底應該怎麼用呢,讓我們先開看看普通字串的宣告吧。

let name = 'joker';

let title = 'joker';

console.log(name === title) //true

當我們拿兩個值相同的字串進行比較的時候,返回的結果為true。

let name = symbol();

let title = symbol();

console.log(name === title) //false

但如果我們宣告兩個symbol型別的時候,他們是永遠不會一樣的,所以列印的結果為false。因此我們可以把symbol理解為一種唯一識別符號。簡單理解,我們可以把symbol當成是乙個永遠不會重複的字串。

除此之外,我們還能在symbol裡面新增相應的描述(通過描述能清楚區分該symbol的作用是什麼)。

let name = symbol('我的英文名為joker');

console.log(name) //symbol(我的英文名為joker)

另外系統還給我們提供了乙個名為description的屬性,我們通過這個屬效能獲取到symbol的描述資訊。

console.log(name.description) //我的英文名為joker
除了上面這種定義symbol的方式外,我們還能通過symbol.for的方式定義。

let name = symbol.for("我的英文名為joker");

console.log(name.description) //我的英文名為joker

這兩種定義的方式的區別在於:如果我們通過symbol.for的方式定義的話,系統會幫我們記錄有乙個symbol且它的描述為"我的英文名為joker",在下一次定義symbol的時候,系統就會先查詢記憶體中是否已經宣告了乙個相同的symbol,如果有就把symbol拿過來。因此,即使我們用symbol.for宣告一百次一千次,實際上就只有乙個symbol。但通過symbol()的方式宣告則不同,如果我們宣告一百次,那麼就有一百個symbol。

let name = symbol.for("我的英文名為joker");

let title = symbol.for("我的英文名為joker");

console.log(name === title) //true

這裡的symbol雖然看起來是兩個,但卻指向的是同乙個symbol,因此這裡的列印結果為true。

除此之外,二者之間還有乙個區別:

let name = symbol.for("我的英文名為joker");

let title = symbol("我的英文名為joker");

console.log(symbol.keyfor(name)); //我的英文名為joker

console.log(symbol.keyfor(title)); //undefined

通過symbol.for的方式宣告的時候,是在全域性定義的,因此可以通過symbol.keyfor()的方式獲取到symobl的描述。

但通過symbol()的宣告方式則不是全域性定義的,因此得到的值為undefined。

好了關於symbol這乙個新增的資料型別相信大家已經有了初步的了解,接下來讓我們來看看symbol應該用在什麼場景上呢?

假如有乙個物件裡面存著一次考試的學生成績,但由於這次測試的學生名字都為「joker」,但物件的屬性名卻要唯一,這可怎麼辦呢?這時候我們就可以使用我們的symbol()啦。

思路:將symbol作為我們物件的key值,由於symbol()是唯一的,因此我們再也不怕物件的屬性值重複的問題啦。

不過如果我們把symbol作為物件的屬性名,那麼普通的for in和for of是不能遍歷出來的,這時候我們就要用特殊的遍歷方法。

for (const key of reflect.ownkeys(test))

C 變數宣告定義

1.extern 宣告變數,在乙個檔案裡宣告以後,表示該變數要去其它檔案找變數,告訴編譯器 你現在編譯的檔案中,有乙個識別符號雖然沒有在本檔案或本檔案當前位置中定義,但是它是在別的檔案中或本檔案其它位置定義的全域性變數,你要放行!宣告變數 extern type variable 有extern,無...

宣告,定義,變數的含義

在c語言中,宣告 告訴計算機 編譯器 有,定義 讓計算機 編譯器 建立,宣告不建立,定義建立。變數在程式執行過程中,其值是可以改變的量 在c語言中,變數的宣告和定義是一體的,先定義 宣告 然後呼叫,呼叫必須在定義 宣告 之後。變數的定義格式為 修飾符 型別說明符 變數名識別符號,變數名識別符號,變數...

C 函式的宣告定義

include 宣告 extern char mystrstrpoint char dest,char src extern char mystrstrarr char dest,char src extern char mystrcat char dest,char src extern void...