Symbol类型
- 用途:创建唯一记号,用作非字符串形式的对象属性
- 基本用法
- 不能与
new关键字一起作为构造函数使用,否则会报错
- 全局符号注册表
1.目的:创建并重用符号
2.Symbol.for()以一个字符串作为键,第一次调用时生成一个新符号实例并添加到注册表中,以后使用同样的字符串调用时会先检查注册表,发现存在与字符串对应的符号时就会返回该符号实例
3.Symbol.keyFor()查询全局注册表
4.使用符号作为属性
(1)创建属性的方法:
对象字面量(只能在计算属性语法中使用符号作为属性)、Object.defineProperty()、
Object.defineProperties()
(2)返回属性的方法:
Object.getOwnPropertyNames()返回常规属性数组,
Object.getOwnPropertySymbols()返回符号属性数组,
Object.getOwnPropertyDescriptiors()返回同时包含常规属性和符号属性描述符的对象,
Reflect.ownKeys()返回常规属性和符号属性的键
(3)直接创建并用作对象属性的符号不会丢失(符号属性是对内存中符号的一个引用),但如果没有显式地保存对这些符号属性的引用,就必须遍历对象的所有符号属性才能找到相应的属性键:
- 内置符号
(1)ES6引入了一组常用的内置符号(well-known symbol),这些内置符号以Symbol工厂函数字符串属性的形式存在,它们暴露了语言的内部行为,这些行为可以直接被我们访问、模拟、重写,典型例子:for-of循环会在对象上使用Symbol.iterator属性,我们可以重新定义它的值来改变for-of迭代对象时的行为
(2)所有内置符号属性都是不可写、不可枚举、不可配置的
(3)内置符号其实就是全局函数Symbol()的普通字符串属性,指向一个符号的实例
(4)引用符号在ECMAScript规范中的名称时,前缀为"@@",如:@@iterator就是指Symbol.iterator
(具体的常用符号如下,由于现阶段整体框架有待形成,所以这些以后再来展开)
Symbol.asyncIterator
Symbol.hasInstance
Symbol.isConcatSpreadable
Symbol.iterator
Symbol.match
Symbol.replace
Symbol.search
Symbol.species
Symbol.split
Symbol.toPrimitive
Symbol.toStringTag
Symbol.unscopables
Object类型
- 对象不过就是一组数据和功能的集合
- ECMAScript中的Object是派生其他对象的基类,类似于Java中的java.lang.Object
- 创建对象一般通过new操作符后跟要创建对象的名称,通过Object对象的实例可以创建自定义对象
- Object的属性和方法
注:Object的所有属性和方法在其派生的对象上同样存在
(1)constructor:创建当前对象的函数
(2)hasOwnProperty(propertyName):判断实例上是否存在给定的属性,接受的参数为字符串或符号

(3)isPrototypeOf(object):判断当前对象是否为另一个对象的原型
(4)propertyIsEnumerable(propertyName):判断给定的属性是否可以使用for-in语句枚举,接收的参数为字符串
(5)toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境
(6)toString():返回对象的字符串表示
(7)valueOf():返回对象的数值、布尔值或字符串表示
注:宿主对象,如DOM对象或BOM对象并不受ECMAScript-262标准的约束,所以它们有可能不会继承Object
浙公网安备 33010602011771号