如何从 JavaScript 中用作对象键的同名符号访问数据

How to access data from same name Symbols used as object keys in JavaScript

我正在学习 JavaScript 符号,根据我的阅读,它们用于保护对象 属性 键覆盖。在下面的代码中,我创建了两个具有相同变量名的符号并将它们用作对象键。我想知道如何访问分配给程序底部 "symbol" 键 之一的数据 。如果我完全误解了符号的用途,请指出。

var id = Symbol("my id");             // Create a Symbol

var user = {

    name:"Bob",
    age:30,
    [id]:"my id 12345"               // Use it as a property key and add some data
}

var id = Symbol("my different id"); // Create a new Symbol

user[id] = "my different id 9876"   // Assign it with some new data

console.log(user);

/* The object contains both symbols. No overwrites!


{

    name: "Bob", 
    age: 30, 
    Symbol(my id): "my id 12345", 
    Symbol(my different id): "my different id 9876"

}


*/

如果我没理解错的话,你需要

var id = Symbol.for("my id");

var user = {
    name:"Bob",
    age:30,
    [id]:"my id 12345"     
}

var id = Symbol.for("my different id");

user[id] = "my different id 9876"

console.log(user[Symbol.for("my id")]); 
console.log(user[Symbol.for("my different id")]);

id变量被重新赋值,所以你可以使用它只是为了获得"my different id 9876"符号不会被重新赋值。

I create two symbols of the same variable name and use them as object keys.

你为什么要这么做? Symbols are meant to provide unique, non-enumerable property keys 以避免名称冲突。它们有两个不同的身份,应该用作常量,您可以从需要的地方引用它们。您甚至可以创建多个具有相同描述的不同符号:

const idA = Symbol("my id");
const idB = Symbol("my id");
console.log({[idA]: 12345, [idB]: 9876});

I want to know how to access the data assigned to either one of the "symbol" keys at the bottom of the program.

只保留对它们的引用:

const myId = Symbol("my id");
const myDifferentId = Symbol("my different id");

var user = {
    name:"Bob",
    age:30,
    [myId]:"my id 12345"
};
user[myDifferentId] = "my different id 9876";

console.log(user);
console.log(user[myId], user[myDifferentId]);

如果您没有保留参考,您也可以使用 Object.getOwnPropertySymbols function.

访问它们