[TOC]
>[success] # 創建Symbol
<br/>
~~~
在 JS 已有的基本類型('字符串'、'數值'、'布爾類型'、'null'與'undefined')之外, 'ES6'引入了一種
新的'基本類型':'Symbol'(符號)。 Symbol 起初被設計用于'創建對象私有成員',而這也是 JS 開發者期待
已久的特性。在'Symbol'誕生之前,將'字符串作為屬性名稱導致屬性可以被輕易訪問',無論命名規則如何。而
'私有屬性'意味著開發者'可以創建非字符串類型的屬性名稱',由此可以防止使用常規手段來探查這些名稱。
~~~
~~~
// 創建私有屬性
let firstName = Symbol()
// 創建對象
let person = {}
// 賦值私有屬性
person[firstName] = "Nicholas"
console.log(person[firstName]) // "Nicholas"
console.log(person) // {Symbol():"Nicholas"}
console.log(person[Symbol()]) // undefined
或者這樣寫:
// 創建私有屬性
let firstName = Symbol()
let person = {
[firstName]: 'Nicholas'
}
console.log(person[firstName]) // "Nicholas"
~~~
<br/>
>[success] ## 帶參數的Symbol
~~~
'Symbol'函數還可以接受一個額外的'參數'用于'描述Symbol',該描述并'不能用來訪問對應屬性', 但它能
用于調試,例如:
~~~
~~~
let firstName = Symbol("first name")
let person = {}
person[firstName] = "Nicholas"
// 用in運算符判斷first name是否為person對象中的屬性
console.log("first name" in person) // false
console.log(person[firstName]) // "Nicholas"
console.log(firstName) // "Symbol(first name)"
~~~
<br/>
>[success] ## 識別Symbol
~~~
由于'Symbol'是'基本類型'的值,因此你可以使用'typeof'運算符來判斷一個變量是否為'Symbol'。
'ES6'擴充了'typeof'的功能以便讓它在作用于'Symbol'的時候能夠返回'symbol',
例如:
~~~
~~~
let symbol = Symbol("test symbol")
console.log(typeof symbol) // "symbol"
~~~
盡管有其他方法可以判斷一個變量是否為`Symbol`, `typeof`運算符依然是最準確、最優先的判別手段。
>[warning] ## 注意
~~~
1. 由于'Symbol'是'基本類型值',因此調用'new Symbol()'將會拋出錯誤。你可以通過'newObject(Symbol)'
來創建一個'Sybol實例',但尚不清楚這能有什么作用。
~~~
- Javascript基礎篇
- Array數組
- 數組插入值
- filter()
- forEach()
- push()
- pop()
- unshift()
- shift()
- valueOf()
- 面向對象思想
- Javascript 面向對象編程(一):封裝
- Javascript面向對象編程(二):構造函數的繼承
- Javascript面向對象編程(三):非構造函數的繼承
- 解構
- 數組的解構賦值
- 對象的解構賦值
- 函數參數解構
- 字符串的解構賦值
- 數值和布爾值的解構賦值
- 圓括號問題
- 字符串.
- split()
- charAt()
- charCodeAt()
- concat()
- indexOf()
- lastIndexOf()
- match()
- replace()
- includes()
- 初識遞歸
- 渲染ul-li樹形結構
- 異步函數解決方案
- 1. callback回調函數
- 2. ES6 - Promise
- JavaScript高級程序設計(書)
- 在html中使用JavaScript
- script標簽的位置
- 延遲腳本
- 異步腳本
- <noscript>元素
- 基本概念
- 嚴格模式
- 變量詳解
- 數據類型
- typeof操作符
- undefined類型
- Null類型
- Boolean類型
- Number類型
- 深入了解ES6(書)
- var 、let 、 const
- 字符串與正則表達式
- 字符串
- 正則表達式
- 函數
- 函數形參默認值
- 使用不具名參數
- 函數構造器的增強能力
- 擴展運算符
- name屬性
- 明確函數的多重用途
- 塊級函數
- 箭頭函數
- 尾調用優化
- 擴展的對象功能
- 對象類別
- 對象字面量語法的擴展
- ES6對象新增方法
- 重復的對象屬性
- 自有屬性的枚舉順序
- 更強大的原型
- 解構:更方便的數據訪問
- 為什么要用解構?
- 對象解構
- 數組解構
- 混合解構
- 參數解構
- Symbol與Symbol屬性
- 創建Symbol
- Symbol的使用方法
- Symbol全局私有屬性
- Symbol與類型強制轉換
- Symbol屬性檢索
- Symbol的一些構造方法
- Set集合與Map集合
- Set集合
- Weak Set集合(弱引用Set集合)
- Map集合
- JS標準內置對象
- Object 構造函數及屬性
- Object 構造方法
- Symbol 內建對象類的函數及屬性
- Set 構造函數及屬性
- Weak Set 構造函數及屬性
- JS雜項
- 類數組對象
- Class類的理解和使用