有没有一种方法可以测试两个JavaScript ArrayBuffers是否相等? 我想为消息组合方法编写测试。 我找到的唯一方法是将ArrayBuffer转换为字符串,然后进行比较。 我错过了什么吗?
以下代码会返回false,即使我认为它应该是true:
以下代码会返回false,即使我认为它应该是true:
(function() {
'use strict';
/* Fill buffer with data of Verse header and user_auth
* command */
var buf_pos = 0;
var name_len = 6
var message_len = 4 + 1 + 1 + 1 + name_len + 1;
var buf = new ArrayBuffer(message_len);
var view = new DataView(buf);
/* Verse header starts with version */
view.setUint8(buf_pos, 1 << 4); /* First 4 bits are reserved for version of protocol */
buf_pos += 2;
/* The lenght of the message */
view.setUint16(buf_pos, message_len);
buf_pos += 2;
buf_pos = 0;
var buf2 = new ArrayBuffer(message_len);
var view2 = new DataView(buf);
/* Verse header starts with version */
view2.setUint8(buf_pos, 1 << 4); /* First 4 bits are reserved for version of protocol */
buf_pos += 2;
/* The lenght of the message */
view2.setUint16(buf_pos, message_len);
buf_pos += 2;
if(buf == buf2){
console.log('true');
}
else{
console.log('false');
}
}());
如果我试图比较view和view2,结果还是假的。
DataView
来提高性能。请参见下面的答案。 - anthumchrisgetUIntxx
函数调用,那么源代码将变得难以阅读。此外,如果你把整个处理过程放在一个整洁的模块中,则在结构和原始访问之间保持一致性可能会更容易。老实说,我不知道JS在优化方面取得了多大进展,也不知道哪种方法比另一种更快。 - kuroi neko