Node.js- 将一个变量设置为另一个文件中的变量是否也会更改另一个文件中的该变量?

Node.js- Does setting a variable to a variable from another file also change that variable in the other file?

我有一个名为 config.js 的文件用作配置文件:

var config = {};

config.defaultCmds = ['modB!', 'addReqs', 'rmReqs', 'listReqs', 'addAdminRole', 'rmAdminRole', 'setHereRequired', 'setCmd', 'commands', 'setDefault', 'replaceReqs'];
config.defaultRaidReqs = [new RegExp('LF[1-5]M|LFG', 'i'), new RegExp('prestige|prest|prest.|normal|anything', 'i'), new RegExp('levi|leviathan|raid|eow|lair|raid lair', 'i'), new RegExp('https://discord.gg/|CR[1-4]', 'i')];
config.defaultCrucibleReqs = [new RegExp('LF[1-4]M|LFG', 'i'), new RegExp('trials|crucible|pvp|quickplay|quick|anything', 'i'), new RegExp('https://discord.gg/|CC[1-5]', 'i')];
config.defaultPveReqs = [new RegExp('LF[1-5]M|LFG', 'i'), new RegExp('prestige|prest|prest.|normal|anything', 'i'), new RegExp('nf|nightfall|anything|rat king|public event|', 'i'), new RegExp('https://discord.gg/|CS[1-4]', 'i')];

config.defaultAdminRoles = ['LEADERSHIP'];

config.defaultHereRequired = false;

config.defaultRaidChannel = "lfg-raid";
config.defaultCrucibleChannel = "lfg-crucible";
config.defaultPveChannel = "lfg-pve";
config.defaultQuestionsChannel = "lfg-questions";

module.exports = config;

在我的主代码中,我试图将变量设置为配置文件中的这些变量,但每当我在主代码中更改变量时,它也会更改 config.js 中的变量。 例如当程序启动时,它有这样的东西:

const config = require('./config');
cmds = config.defaultCmds;
cmds[0] = 'something';

新打印出的 cmds[0] 和 config.defaultCmds[0] 现在等于 'something',而不是 cmds[0] 等于 'something' 和 config.defaultCmds[ 0] 等于 'modB!',如 config.js.

中所定义

这很有意义,但是将一个变量设置为来自另一个文件的变量是否会以某种方式link将两者结合在一起,所以如果一个改变另一个也会改变?

当你在做 cmds = config.defaultCmds;cmds 只是指向同一个数组,它不会创建一个新数组。

如果你想创建一个新数组,你可以cmds = config.defaultCmds.slice()

现在 cmds 是一个新数组,您可以在不影响配置对象的情况下更改其值。

上面的答案有效,但 slice 并不是真正为这种用法设计的。

var cmds =   Object.assign({}, config.defaultCmds)