代码之家  ›  专栏  ›  技术社区  ›  warhammercasey

节点。js-将变量设置为另一个文件中的变量是否也会更改另一个文件中的变量?

  •  0
  • warhammercasey  · 技术社区  · 6 年前

    我有一个名为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;
    

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

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

    新建并打印出cmds[0]和config。defaultCmds[0]现在将等于“something”,而不是cmds[0]等于“something”和config。defaultCmds[0]等于“modB!”,如配置中所定义。js。

    这没有多大意义,但将一个变量设置为另一个文件中的一个变量是否会以某种方式将两者联系在一起,因此如果一个文件发生更改,其他文件也会发生更改?

    2 回复  |  直到 6 年前
        1
  •  0
  •   AbhinavD    6 年前

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

    如果要创建新数组,可以执行以下操作 cmds = config.defaultCmds.slice()

    现在 cmds 是一个新数组,您可以在其上更改值而不影响config对象。

        2
  •  0
  •   Rajat banerjee    6 年前

    上面的答案是可行的,但slice并非真正用于此用途。

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