摘要:在運(yùn)行時(shí)環(huán)境中,通過(guò)調(diào)用函數(shù)創(chuàng)建值,該函數(shù)動(dòng)態(tài)生成匿名的唯一值。創(chuàng)建和使用值的唯一創(chuàng)建方法,是通過(guò)調(diào)用函數(shù)來(lái)返回,不支持操作。共享體系提供了一個(gè)全局注冊(cè)表,用于在大文件或多文件代碼中追蹤值。
Symbol由來(lái)
Symbol是ES6引入的新類(lèi)型,所以在ES5的基礎(chǔ)上,JS就有了字符串(string)、數(shù)字型(number)、布爾(bool)、null、undefined和Symbol共六種基本類(lèi)型(bigint ES2016 添加)。
In JavaScript, Symbol is a primitive value.創(chuàng)建和使用Symbol
Symbol是一種原始數(shù)據(jù)類(lèi)型
什么是原始數(shù)據(jù)類(lèi)型
A value having the data type "symbol" can be referred to as a "symbol value." In the JavaScript run-time environment, a symbol value is created by invoking the function Symbol, which dynamically produces an anonymous, unique value. A symbol may be used as an object property.
具有Symbol數(shù)據(jù)類(lèi)型的值被稱(chēng)為"Symbol"值。在JavaScript運(yùn)行時(shí)環(huán)境中,通過(guò)調(diào)用函數(shù)Symbol創(chuàng)建Symbol值,該函數(shù)動(dòng)態(tài)生成匿名的唯一值。
Symbol can have an optional description, but for debugging purposes only.
MDN Symbol
該數(shù)據(jù)類(lèi)型通常被用作一個(gè)對(duì)象屬性的鍵值——當(dāng)你想讓它是私有的時(shí)候。例如,symbol 類(lèi)型的鍵存在于各種內(nèi)置的 JavaScript 對(duì)象中。同樣,自定義類(lèi)也可以這樣創(chuàng)建私有成員。symbol 數(shù)據(jù)類(lèi)型具有非常明確的目的,并且因?yàn)槠涔δ苄詥我坏膬?yōu)點(diǎn)而突出;一個(gè) symbol 實(shí)例可以被賦值到一個(gè)左值變量,還可以通過(guò)標(biāo)識(shí)符檢查類(lèi)型,這就是它的全部特性。不能對(duì)該類(lèi)型實(shí)例使用其他操作符(將“Symbol”類(lèi)型的實(shí)例與 “Number” 類(lèi)型的實(shí)例對(duì)比,例如整數(shù) 42,該實(shí)例就具有將值與其他類(lèi)型的值進(jìn)行比較或組合的運(yùn)算符)。
Symbol值的唯一創(chuàng)建方法,是通過(guò)調(diào)用Symbol()函數(shù)來(lái)返回,不支持new操作。
Symbol接受一個(gè)可選參數(shù),可以添加一段文本描述,但這段描述不可用于屬性訪問(wèn)。
let firstName = Symbol("first name"); let persion = {}; person[firstName] = "Tom"; console.log("first name" in person); // false console.log(persion[firstName]); // "Tom" console.log(firstName); // "Symbol(first name)"
Symbol的描述被存儲(chǔ)在內(nèi)部的[[Description]]屬性中,只有當(dāng)調(diào)用Symbol的toString方法才可以讀取這個(gè)屬性,但不能直接在代碼里訪問(wèn)[[Description]]。
所有使用計(jì)算屬性名的地方,都可以使用Symbol。
let firstName = Symbol("first name"); let person = { [firstName] : "Tom" } Object.defineProperty(person, firstName, { writable: false}); let lastName = Symbol("last name"); Object.defineProperties(person, { [lastName]: { value: "Lee", writable: false } }); console.log(person[firstName]); // Tome console.log(person[lastName]); // Lee const propertyNames = Object.getOwnPropertyNames(person); console.log(propertyNames); // [] const propertySymbols = Object.getOwnPropertySymbols(person); console.log(propertySymbols); // [Symbol(first name), Symbol(last name)]共享體系
Symbol提供了一個(gè)全局注冊(cè)表,用于在大文件或多文件代碼中追蹤Symbol值。
如果想創(chuàng)建一個(gè)可共享的Symbol,需要使用Symbol.for方法。它只接受一個(gè)參數(shù),也就是即將創(chuàng)建的Symbol的字符串標(biāo)識(shí),這個(gè)參數(shù)也被用作Symbol的描述。
let uid = Symbol.for("uid"); let obj = {}; obj[uid] = "12345"; console.log(obj[uid]); // "12345" console.log(uid); // "Symbol(uid)" console.log(Symbol.forKey(uid)); // "uid"
Symbol.for方法首先在全局注冊(cè)表中搜索鍵值為"uid"的Symbo值,如果存在,直接返回已有的Symbol,否則,創(chuàng)建一個(gè)新的Symbol,并使用這個(gè)鍵在Symbol全局注冊(cè)表中注冊(cè),隨即返回新創(chuàng)建的Symbol。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105629.html
類(lèi)型 基本類(lèi)型 - string - number - boolean - null - undefined - symbol(表示獨(dú)一無(wú)二的值,使用時(shí)需要注意瀏覽器是否支持) //example const symbol1 = Symbol(); const symbol2 = Symbol(42); const symbol3 = Symbol(...
摘要:在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。所以無(wú)法成為構(gòu)造函數(shù),不能使用操作符。參數(shù)將擴(kuò)展運(yùn)算符作用于參數(shù),即為參數(shù)。聲明式,直接為函數(shù)名。通過(guò)構(gòu)造函數(shù)生成的,為。函數(shù)的屬性,在其描述對(duì)象的屬性上,為函數(shù)名。 ES6在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。 1 箭頭函數(shù) 箭頭函數(shù)是ES6中定義函數(shù)的新形式。 新形式不僅簡(jiǎn)化了定義方式,更為函數(shù)本身...
摘要:返回布爾值標(biāo)簽?zāi)0蹇梢跃o跟一個(gè)函數(shù)名后邊,該函數(shù)將被調(diào)用來(lái)處理這個(gè)模板字符串。其它情況下返回值為在內(nèi)部,整數(shù)和浮點(diǎn)數(shù)使用同樣的存儲(chǔ)方法,所以和被視為同一個(gè)值。 簡(jiǎn)介 ES6目標(biāo),讓JavaScript變成一個(gè)企業(yè)級(jí)的開(kāi)發(fā)語(yǔ)言,不僅僅限制與前端頁(yè)面的腳本語(yǔ)言。 標(biāo)準(zhǔn)(Standard): 用于定義與其他事物區(qū)別的一套規(guī)則 實(shí)現(xiàn)(Implementation): 某個(gè)標(biāo)準(zhǔn)的具體實(shí)施/真實(shí)實(shí)...
摘要:屬性的簡(jiǎn)潔表示法在中允許直接寫(xiě)入變量和函數(shù),作為對(duì)象的屬性和方法,使得代碼的書(shū)寫(xiě)更為簡(jiǎn)潔。循環(huán)遍歷對(duì)象自身的和繼承的可枚舉屬性不含屬性。返回一個(gè)數(shù)組,包含對(duì)象自身的所有屬性的鍵名。 showImg(https://segmentfault.com/img/remote/1460000019259004?w=1282&h=1920); 1. 屬性的簡(jiǎn)潔表示法 在ES6中 允許直接寫(xiě)入變量...
閱讀 2437·2021-10-09 09:59
閱讀 2191·2021-09-23 11:30
閱讀 2599·2019-08-30 15:56
閱讀 1156·2019-08-30 14:00
閱讀 2947·2019-08-29 12:37
閱讀 1265·2019-08-28 18:16
閱讀 1669·2019-08-27 10:56
閱讀 1033·2019-08-26 17:23