第6章 Symbol和Symbol属性
在ES5语言中包含5种原始类型:字符串, 数字, 布尔型, null, undefined
在ES6引入了第6种原始类型: Symbol
虽然通过Symbol可以为属性添加非字符串名称, 但是其隐私性就被打破了.
1.创建Symbol
可以通过typeof来检测变量是否为Symbol类型
let firstName = Symbol('first name');
let person = {};
person[firstName] = 'ylz';
console.log('first name' in person); // false
console.log(person[firstName]); // 'ylz'
2.Symbol的使用方法
所有使用可计算属性名的地方, 都可以是使用Symbol.
3.Symbol共享体系
希望在不同的代码中共享同一个Symbol
ES6提供了一个随时可以访问的全局Symbol注册表
let uid = Symbol.for('uid');
let = object = {
[uid]: '1234'
};
console.log(object[uid]); // '1234'
let uid2 = Symbol.for('uid');
console.log(uid == uid2); // true
console.log(object[uid2]); // '1234'
4.Symbol属性检索
ES5中:
Object.keys()方法和Object.getOwnPropertyNames()方法可以检索对象中所有的属性名, 但是不支持Symbol属性;
ES6中:
添加了Object.getOwnPropertySymbols()方法的返回值是一个包含Symbol自有属性的数组.
5.通过well-known暴露Symbol内部操作
这些well-known Symbol包括:
- Symbol.hasInstance
- Symbol.isConcatSpreadable
...