[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类的理解和使用