Javascript Node.js中的缓冲区问题

Javascript Node.js中的缓冲区问题,javascript,node.js,Javascript,Node.js,我在Node.js中使用缓冲区时遇到了一个小问题 我已经这样定义了我的常量缓冲区 var commands = { BufferOne : new Buffer([0XCA, 0X11, 0X00, 0X00, 0X60, 0X01, 0X00, 0X01, 0X08, 0X07, 0X6D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X4F, 0X41, 0X30, 0X30, 0X00]) } 现在,当我

我在Node.js中使用缓冲区时遇到了一个小问题

我已经这样定义了我的常量缓冲区

var commands = {
    BufferOne : new Buffer([0XCA, 0X11, 0X00, 0X00, 0X60, 0X01, 
              0X00, 0X01, 0X08, 0X07, 0X6D, 0X00, 0X00, 0X00,
              0X00, 0X00, 0X4F, 0X41, 0X30, 0X30, 0X00])
}
现在,当我在程序中收到任何特定事件时,我想从中更新14,15

比方说,在一个函数中,我将创建局部变量

var bufferCopy = commands.BufferOne;
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";
然后我想用bufferCopy发送到串行端口,但我的功能不起作用

如果我喜欢这个,从上面看也是一样

var bufferCopy = new Buffer([0XCA, 0X11, 0X00, 0X00, 0X60, 0X01, 0X00,
   0X01, 0X08, 0X07, 0X6D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X4F, 0X41,
   0X30, 0X30, 0X00]);
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";
那么它工作得很好。我可以在串行端口上得到结果

所以我无法理解为什么我不能从上面声明的常量创建任何局部变量


我想使用常量的原因是,我想将这些all常量移动到某个服务器,这样我就可以从服务器发送这些命令,而不是保存在节点程序本身中。

当您分配一个类似var bufferCopy=commands.BufferOne;的缓冲区时;,它创建了一个引用,就像JavaScript中所有对象分配到原始缓冲区一样,因此您实际上是在修改commands.BufferOne,而不是commands.BufferOne的副本

如果需要副本,则必须显式创建副本,如:

var bufferCopy = new Buffer(commands.BufferOne);
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";

然后只修改bufferCopy,而不修改commands.BufferOne。

赋值可能不应该是字符串0x02!=0x02@josh3736字符串由缓冲区实现在内部解析。