ES6學習-Symbol

Symbol

數據類型Symbol,表示獨一無二的值。

對象的屬性名可有兩種類型,一種是原來的字符串,另一種是新增的 Symbol 類型

可以保證不與其他屬性名產生沖突。

let s1 = Symbol()
let s2 = Symbol()
console.log(s1, s2, s1 == s2)//Symbol() Symbol() false

可以接受一個字符串作為參數,表示對 Symbol 實例的描述

let s1 = Symbol('foo');

如果 Symbol 的參數是一個對象,就會調用該對象的toString方法

const obj = {toString() {return 'abc';}
};
const sym = Symbol(obj);
sym // Symbol(abc)

Symbol.prototype.description

讀取Symbol的描述

const sym = Symbol('foo')
sym.description //foo

作為屬性名

let mySymbol = Symbol();
let a = {};a[mySymbol] = 'Hello!';
let a = {let a = {};};
let a = {};Object.defineProperty(a, mySymbol, { value: 'Hello!' });

屬性名的遍歷

Symbol 作為屬性名,遍歷對象的時候,該屬性不會出現在for...infor...of循環中,也不會被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回

Object.getOwnPropertySymbols()方法,可以獲取指定對象的所有 Symbol 屬性名。該方法返回一個數組,成員是當前對象的所有用作屬性名的 Symbol 值。

const objectSymbols = Object.getOwnPropertySymbols(obj);

Reflect.ownKeys()方法可以返回所有類型的鍵名,包括常規鍵名和 Symbol 鍵名

let obj = {[Symbol('my_key')]: 1,enum: 2,nonEnum: 3
};
Reflect.ownKeys(obj)
//  ["enum", "nonEnum", Symbol(my_key)]

Symbol.for()

Symbol("cat")每次調用都會返回一個新的值。

Symbol.for()會先檢查給定的key是否已經存在,存在:每次都會返回同一個 Symbol 值;如果不存在:才會新建一個值。

Symbol.for("bar") === Symbol.for("bar")// trueSymbol("bar") === Symbol("bar")
// false

由于Symbol()寫法沒有登記機制,所以每次調用都會返回一個不同的值。

Symbol.keyFor()

Symbol.keyFor()方法返回一個已登記的 Symbol 類型值的key

let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

注意,Symbol.for()為 Symbol 值登記的名字,是全局環境的,不管有沒有在全局環境運行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36815.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

liunx exercise

云計算作業 Linux DAY1 1、創建alan1用戶,并使用root用戶切換用戶至alan1用戶。(兩種方式切換【加-與不加-】,并總結其效果) [rootlocalhost ~]# useradd alan1 [rootlocalhost ~]# su alan1 [alan1localhost root]$ pwd /roo…

FPGA學習——驅動WS2812光源并進行動態顯示

文章目錄 一、WS2812手冊分析1.1 WS2812燈源特性及概述1.2 手冊重點內容分析1.2.1 產品概述1.2.2 碼型及24bit數據設計 二、系統設計2.1 模塊設計2.2 模塊分析2.2.1 驅動模塊2.2.1 數據控制模塊 三、IP核設置及項目源碼3.1 MIF文件設計3.2 ROM IP核調用3.3 FIFO IP核調用3.4 項…

源碼斷點分析Spring的占位符(Placeholder)是怎么工作的

項目中經常需要使用到占位符來滿足多環境不同配置信息的需求&#xff0c;比如&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://www.springframe…

InnoDB文件物理結構解析7 - FIL_PAGE_SDI

在數據庫系統中&#xff0c;通常包含數據字典(data dictionary)用于記錄數據庫對象的元數據(表&#xff0c;分區&#xff0c;觸發器&#xff0c;存儲過程&#xff0c;函數的定義)&#xff0c;我們可以通過information_schema(i_s)數據庫下的視圖(view)或者SHOW語句來訪問數據字…

【愛書不愛輸的程序猿】CPOLAR+HFS,低成本搭建NAS

歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享&#xff0c;與更多的人進行學習交流 通過HFS低成本搭建NAS&#xff0c;并內網穿透實現公網訪問 - cpolar 極點云 前言1.下載安裝cpolar1.1 設置HFS訪客1.2 虛擬文件系統 2. 使用cpolar建立一條內網穿透數據隧道2.1 保留…

(三) 搞定SOME/IP通信之CommonAPI庫

本章主要介紹在SOME/IP通信過程中的另外一個IPC通信利劍,CommonAPI庫,文章將從如下幾個角度讓讀者了解什么是CommonAPI, 以及庫在實際工作中的作用 SOME/IP通信之CommonAPI CommonAPI庫是什么CommonAPI庫的編譯寫個Demo實戰一下CommonAPI庫是什么 CommonAPI是GENIVI組織開發…

推出 Elasticsearch 查詢語言 (ES|QL)

作者&#xff1a;Costin Leau 我很高興地宣布&#xff0c;經過大約一年的開發&#xff0c;Elasticsearch 查詢語言 (ES|QL) 已準備好與世界共享&#xff0c;并已登陸 Elasticsearch 存儲庫。 ES|QL 是 Elasticsearch 原生的強大聲明性語言&#xff0c;專為可組合性、表現力和速…

Django-配置郵箱功能(一):使用django自帶的發送郵件功能

一、獲取郵箱授權碼 以QQ郵箱為例子&#xff1a; 1、進入到設置&#xff0c;找到賬戶 2、開啟POP3等服務&#xff0c;點擊管理服務 3、進入管理服務&#xff0c;生成授權碼 4、按照要求發送短信就可以了 5、將授權碼復制保存&#xff0c;離開界面就看不到了 二、django項目中…

2023上半年京東手機行業品牌銷售排行榜(京東數據平臺)

后疫情時代&#xff0c;不少行業都迎來消費復蘇&#xff0c;我國智能手機市場在今年上半年也實現溫和的復蘇&#xff0c;手機市場的出貨量回暖。 根據鯨參謀平臺的數據顯示&#xff0c;2023年上半年&#xff0c;京東平臺上手機的銷量為2830萬&#xff0c;環比增長約4%&#xf…

劍指 Offer ! 61. 撲克牌中的順子

參考資料&#xff1a;力扣K神的講解 劍指 Offer 61. 撲克牌中的順子 簡單 351 相關企業 從若干副撲克牌中隨機抽 5 張牌&#xff0c;判斷是不是一個順子&#xff0c;即這5張牌是不是連續的。2&#xff5e;10為數字本身&#xff0c;A為1&#xff0c;J為11&#xff0c;Q為12&…

引入三階失真的非線性放大器的模擬輸出及使用中值濾波器去除峰值研究(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

【C/C++】STL queue 非線程安全接口,危險!

STL 中的 queue 是非線程安全的&#xff0c;一個組合操作&#xff1a;front(); pop() 先讀取隊首元素然后刪除隊首元素&#xff0c;若是有多個線程執行這個組合操作的話&#xff0c;可能會發生執行序列交替執行&#xff0c;導致一些意想不到的行為。因此需要重新設計線程安全的…

JVM 內存結構

1、方法區&#xff08;線程共享&#xff09; 存儲靜態變量(靜態方法、變量、代碼塊)、常量池、類信息 2、堆信息&#xff08;線程共享&#xff09; 存儲實例對象&#xff0c;例如 new 出來的對象信息 A a1 new A() 3、虛擬機棧&#xff08;線程隔離&#xff09; 每個線程的都有…

三、MySql表的操作

文章目錄 一、創建表&#xff08;一&#xff09;語法&#xff1a;&#xff08;二&#xff09;說明&#xff1a; 二、創建表案例&#xff08;一&#xff09;代碼&#xff1a;&#xff08;二&#xff09;說明&#xff1a; 三、查看表結構&#xff08;一&#xff09;語法&#xff…

docker相關命令總結(停止、重啟、重加載配置文件)

常用命令 # 配置 Docker 守護進程的行為和參數 vi /etc/docker/daemon.json# 停止docker服務 sudo systemctl stop docker# 啟動 Docker 服務&#xff1a; sudo systemctl start docker# 重新加載systemd守護程序的配置文件&#xff0c;不會重啟服務&#xff08;配置文件&…

Go語言template模板語法

Go語言模板語法 文章目錄 <center> Go語言模板語法連接前后端的符號: {{}}注釋管道(pipeline)變量條件判斷range 關鍵字with 關鍵字比較函數自定義函數嵌套模板模板繼承 連接前后端的符號: {{}} 模板語法都包含在{{}}之中,其中{{.}}中的.表示當前對象.在傳入一個結構體對…

sql-libs靶場-----0x00、環境準備

文章目錄 一、PhPstudy下載、安裝二、Sqli-libs下載、搭建三、啟用Sqli-libs phpstudy地址&#xff1a;https://www.xp.cn/ sqli-libs地址&#xff1a;https://github.com/Audi-1/sqli-labs 一、PhPstudy下載、安裝 1、下載–解壓–安裝&#xff0c;安裝完成如下圖 2、更換php…

【學習筆記】[AGC021F] Trinity

有點難&#x1f605; 考慮加入每一列&#xff0c;發現我們只關心當前還未確定的行的數目 有點難算&#x1f605; 設 d p i , j dp_{i,j} dpi,j?表示有 i i i列&#xff0c;其中 j j j行未確定的方案數。欽定每一列至少有一個黑色格子。 d p i , j j ( j 1 ) 2 d p i ? 1…

IGV.js 的完全本地化運行探索

問題及解決方法 IGV.js 完全本地化是為了合規&#xff0c;不使用外網的情況下查看基因組。不聯網需要下載 genomes.json 文件及其中的內容之外&#xff0c;還需要修改 igv.js本身&#xff0c;防止5s超時后才顯示網頁內容。修改的關鍵詞是: genomes.json&#xff0c;改為本地的…

Leetcode-每日一題【劍指 Offer 13. 機器人的運動范圍】

題目 地上有一個m行n列的方格&#xff0c;從坐標 [0,0] 到坐標 [m-1,n-1] 。一個機器人從坐標 [0, 0] 的格子開始移動&#xff0c;它每次可以向左、右、上、下移動一格&#xff08;不能移動到方格外&#xff09;&#xff0c;也不能進入行坐標和列坐標的數位之和大于k的格子。例…