Symbols 是 JavaScript 中的一种原始数据类型,例如 number, boolean 或者 null,它们通常用于避免属性名称冲突,或模拟 JavaScript 对象的私有值。

您可以通过调用全局函数来创建 Symbol()

const sym = Symbol();

Symbol() 函数接受一个参数,一个字符串 description 打印 Symbols 时会显示。

const sym = Symbol(my description);

console.log(sym); // Prints Symbol(my description)

主要特征

Symbols 有两个关键特征。 第一个关键特征是 没有两个 Symbols 永远相等 。 即使两个 Symbols 具有相同的描述,它们也不相等。

Symbol() === Symbol(); // false

Symbol(test) === Symbol(test); // false

第二个关键特性是 对象键可以是 Symbols。通常对象键只能是 Symbols 或字符串。

const test = Symbol(test);

const obj = {};
obj.test = hello;
obj[test] = world;

obj.test; // hello
obj[test]; // world

由于没有两个 Symbols 永远相等,因此除非您有权访问 Symbols,否则您无法访问 Symbols 属性。 这使得 Symbols 可以方便地创建只能在特定函数中访问的隐藏值。

function addSymbol(obj) {
  const sym = Symbol(test);
  obj[sym] = my hidden value;

  return obj;
}

const obj = addSymbol({});
// No way to access obj[sym] here, unless you explicitly look
// into `Object.getOwnPropertySymbols()`.

Symbols 也被排除在外 JSON.stringify() 输出,这使得它们非常适合存储最终用户不应该看到的纯程序数据。

© 版权声明
评论 抢沙发

请登录后发表评论