【发布时间】:2022-01-17 15:20:27
【问题描述】:
由于符号是唯一标识符,它们可以帮助我们避免覆盖对象中的同名属性。
就像假设一样,有一个名为 user 的对象被用于许多不同的程序中。
let user = {
name : "ram",
id : 5,
};
所以现在,假设这个用户对象在另一个程序中使用(我们称之为 pro1),如果我们想给它添加一个名为 id 的属性,我们将使用符号 id,像这样 -
let id = Symbol();
user[id] = 2;
所以之前的 id 属性不会被覆盖在用户对象中。
但现在假设,
如果用户对象已经有symbol id属性,并且在另一个没有定义symbol id的程序中使用,那么就会出现错误,因为symbol id没有定义。
那么我的问题是符号如何帮助避免 JavaScript 中对象中的命名冲突????
我真的无法理解它背后的概念。请澄清一下。
【问题讨论】:
-
请注意
let id = Symbol(); user[id] = 2;不会将值2分配给user.id。 -
第二个程序也可以执行
let id = Symbol(); user[id] = 3;,这样就可以了。现在将有两个符号属性 - 一个设置在2,另一个设置在3。 -
每个新符号都是独一无二的,所以你可以这样做
user = { [Symbol()]: 2, [Symbol()]: 2 },它是有效的......但毫无意义 -
我不明白您所说的“它用于另一个未定义符号 id 的程序”是什么意思。能详细点吗?
-
@HimanshuRai 不,没有错误。该对象中只有一个未使用的属性,程序对此一无所知,即使偶然也不会尝试访问。
标签: javascript object symbols