Symbol的使用場景

2021-10-07 13:34:48 字數 2718 閱讀 8899

symbol的使用場景

使用symbol來作為物件屬性名(key)

通常定義或訪問物件的屬性時都是使用字串:

let obj =

obj[

"abc"

]// 123

obj[

"hello"

]// 'world'

在利用symbol以後定義和訪問物件的屬性:

const

prop_name

=symbol()

const

prop_age

=symbol()

let obj =

obj[

prop_age]=

18obj[

prop_name

]// '劉卿'

obj[

prop_age

]// 18

symbol型別的key不能通過object.keys()或者for...in來列舉。它沒有被包含在物件自身的屬性名集合(property names)裡面。

let obj =

object.

keys

(obj)

// ['age', 'title']

for(

let p in obj)

object.

getownpropertynames

(obj)

// ['age', 'title']

利用這個特性,可以把一些不需要對外操作和訪問的屬性用symbol來定義

使用json.stringify()將物件轉換成json字串時,symbol屬性會被排除在輸出內容之外。

json

.stringify

(obj)

//

獲取symbol方式定義的物件屬性,專門針對symbol的api

// 使用object的api

object.

getownpropertysymbols

(obj)

// [symbol(name)]

// 使用新增的反射api

reflect.

ownkeys

(obj)

// [symbol(name), 'age', 'title']

使用symbol來替代常量

我們經常定義一組常量來代表一種業務邏輯下的幾個不同型別,我們通常希望這幾個常量之間是唯一的關係,為了保證這一點,我們需要為常量賦乙個唯一的值。

比如如下的』audio』、『video』、 『image』

const

type_audio

='audio'

const

type_video

='video'

const

type_image

='image'

function

handlefileresource

(resource)

}

在使用symbol定義常量以後就會相當方便

const

type_audio

=symbol()

const

type_video

=symbol()

const

type_image

=symbol

()

這樣可以直接保證三個常量的值是唯一的。

使用symbol定於類的私有屬性/方法

js中沒有訪問控制關鍵字。類上所有定義的屬性或者方法都是可以公開的。使用symbol,再加上模組化機制以後,類的私有屬性和方法才能變成可能;

在檔案a.js中

const

password

=symbol()

class

login

checkpassword

(pwd)

}export

default login

​ 在檔案b.js中

import login from

'./a'

const login =

newlogin

('admin'

,'123456'

)login.

checkpassword

('123456'

)// true

login.

password

// oh!no!

login[

password

]// oh!no!

login[

"password"

]// oh!no!

由於symbol常量password被定義在a.js所在的模組中,外面的模組獲取不到這個symbol,也不可能再建立乙個一模一樣的symbol出來(因為symbol是唯一的),因此這個password的symbol只能被限制在a.js內部使用,所以使用它來定義的類屬性是沒有辦法被模組外訪問到的,達到了乙個私有化的效果。

Git使用場景 命令使用場景

通過個人使用git時候的遇到的使用場景,熟悉了解相關命令,也記錄一下場景的使用方法。所有場景均在ubuntu16.04 linux 作業系統下,其他作業系統有差異的地方自行查閱相關資料。安裝git sudo apt get install git設定及檢視git配置 user.name和user.e...

mongodb 使用場景和不使用場景

1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及json形式的資料。b.動態查詢 mongo支援豐富的查詢表達方式,查詢指令使用json形式的標記,...

mongodb 使用場景和不使用場景

mongodb 使用場景和不使用場景 2012 09 26 10 30 18 分類 linux 1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及js...