ES6 Symbol学习笔记
一、概述总结
1、用途。
与别人的命名容易发生冲突。一种新的原始数据类型,表示独一无二的值。
2、生成。
通过Symbol函数生成,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。 唯一标识 。
3、注意。
不能使用new命令。
接受参数标识好分辨。
symbol( " aaa ") 和 symbol( " aaa ") 不相等 ,唯一的。
不能同其他类型比较。
可以转化成字符串和boolean值。
二、作为属性名的Symbol总结
1、起因。
唯一标识嘛不是,作为对象属性名不会被覆盖。
2、注意。
不能用点运算符。obj.x = 111 ; 点运算符后面是字符串类型。
同理,对象内部的Symbol也要方括号括住。
Symbol作为属性是公开属性,不是私有。
for...in... for...of...不会循环它。
Object.getOwnPropertySymbols(obj)会返回对象的所有Symbol属性。
Reflect.ownKeys()会返回对象的所有键名。
三、Symbol.for() Symbol.keyFor()总结
Symbol.for("cat") == Symbol.for("cat")。 用于登记(类似全局声明 唯一的了)
Symbol.keyFor() 返回一个已登记的Symbol值 。可以在不同的 iframe 或 service worker 中取到同一个值。
四、内置方法
Symbol.hasInstance 指向一个内部方法 应该类似 instanceof
Symbol.isConcatSpreadable concat()是否打开