Node.js 4.0 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

作为属性名的Symbol

由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。

var mySymbol = Symbol();
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
var a = {
  [mySymbol]: 'Hello!'
};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
console.log(a[mySymbol]); // "Hello!"

上面代码通过方括号结构和Object.defineProperty,将对象的属性名指定为一个Symbol值。

Symbol值作为对象属性名时,不能用运算符。

在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。

let s = Symbol();
let obj = {
  [s](arg) { ... }
};

Symbol类型还可以用于定义一组常量,保证这组常量的值都是不相等的。

Symbol值作为属性名时,该属性还是公开属性,不是私有属性。

请按照最示例上面定义一个变量mySymbol通过Symbol函数生成,在定义一个空的a对象,分别a.mySymbol = 'Hello!';a[mySymbol]='Hello!';并打印a[mySymbol]看结果。