由于符号是唯一的标识符,它们可以帮助我们避免在对象中重写相同的名称属性。
就像假设一样,有一个名为user的对象,它在许多不同的程序中使用。
let user = {
name : "ram",
id : 5,
};
现在,假设这个用户对象在另一个程序中使用(让我们称之为pro1(,如果我们想向它添加一个名为id的属性,我们将使用符号id,就像这样-
let id = Symbol();
user[id] = 2;
因此,在用户对象中不会重写以前的id属性。
但现在假设,
如果用户对象已经具有符号id属性,并且它在另一个尚未定义符号id的程序中使用,那么由于没有定义符号id,就会出现错误。
那么我的问题是,在JavaScript中,符号如何帮助避免对象中的命名冲突????
我真的无法理解它背后的概念。请澄清一下。
举个例子,一个应用程序有一些关于相册的数据,并用这些数据做的事情。(警告:接下来的一切都非常简单和做作(。
假设我们有一个模块;与朋友们分享我的音乐品味"以及";订购歌曲";并且这两个模块都希望将曲目标记为已处理,这样您就不会得到重复的副本,也不会多次向朋友大喊。
模块可能看起来像这样:
const processed = Symbol('processed');
function shareWithFriends(track) {
if (track[processed]) { return };
/* do suff */
track[processed] = true;
}
export default shareWithFriends;
然后你可以:
import shareWithFriends from './shareWithFriends.js';
import orderSong from './orderSong.js';
const song = { /* meta data */ };
shareWithFriends(song);
orderSong(song);
两个模块都可以修改元数据,而不会错误地读取其他模块处理的符号。