我刚刚被介绍过JavaScript中的符号概念。我被告知,它们可用于创建唯一的标识符,以避免潜在的冲突。
例如...
let user = {
name : "John",
Symbol("id"): 123, // Symbol("id") is a unique identifier
Symbol("id"): 123 // and the Symbol("id") here is also different and unique
};
...我了解上面的代码。但是,每个“ Symbol(“ id”)”的实际标识符值是多少?我如何找到?
任何指针表示赞赏。
答案 0 :(得分:0)
我无法正确回答您的问题,我试图帮助您希望它会成功
let user = { // belongs to another code
name: "Alex"
};
let id = Symbol("id");
user[id] = 200;
alert( user[id] ); // we can access the data using the symbol as the key
答案 1 :(得分:0)
const id1 = Symbol("id");
const id2 = Symbol("id");
const user = {
name: "John",
[id1]: 123, // "[id1]" is a unique identifier
[id2]: 456, // and the value of "[id2]" here is also different
};
console.log('id1:', user[id1], id1.description);
console.log('id2:', user[id2], id2.description);
答案 2 :(得分:0)
来自mdn:
从Symbol()返回的每个符号值都是唯一的。符号值 可以用作对象属性的标识符;这是数据 类型的唯一目的。
console.log(Symbol('foo') === Symbol('foo'))
ES6符号与语言中更传统的符号相似 像Lisp和Ruby,但并没有紧密集成到该语言中。 在Lisp中,所有标识符都是符号。在JS中,标识符和大多数 属性键仍被视为字符串。符号只是多余的 选项。
如mdn docs所述,您可以访问传递的Description
,但不能访问Symbol
的值:
JavaScript中的大多数值都支持隐式转换为字符串。对于 例如,我们几乎可以警告任何值,并且它将起作用。符号是 特别。它们不会自动转换。
例如,
let Sym = Symbol("Sym"); alert(Sym); // TypeError: Cannot convert a Symbol value to a string
这是防止语言混乱的“语言保护措施”,因为字符串和 符号有根本的不同,不应偶尔出现 将一个转换为另一个。
如果我们真的想显示符号,则需要在其上调用.toString(), 例如,
let Sym = Symbol("Sym"); alert(Sym.toString()); // Symbol(Sym), now it works
或者我们可以使用get symbol.description属性获取 对此的描述,例如
let _Sym = Symbol("Sym"); alert(_Sym.description); // Sym