是否可以在JavaScript中访问Symbol的值?

时间:2019-10-21 04:55:31

标签: javascript symbols

我刚刚被介绍过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”)”的实际标识符值是多少?我如何找到?

任何指针表示赞赏。

3 个答案:

答案 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'))
 

来自an article中的this answer

  

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