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()
输出,这使得它们非常适合存储最终用户不应该看到的纯程序数据。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容