如何从 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.
访问它们
我正在学习 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.