关于数组缓冲区和字符串之间转换的单元测试,我遇到了一个奇怪的问题。
此代码取自:http://updates.html5rocks.com/2012/06/How-to-convert-ArrayBuffer-to-and-from-String。适用于这个小提琴:http://jsfiddle.net/W3DH9/
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
alert(ab2str(str2ab('foo')));
我实现了代码并在jasmine中为它编写了一个单元测试。在这里我得到一个奇怪的错误,说TypeError: '[object Uint16Array]' is not a valid argument for 'Function.prototype.apply' (evaluating 'new Uint16Array(buf)')
我正在运行PhantomJS 1.9.7和Node v0.10.22
如果我将其记录到控制台,则为Object{prototype: Object{subarray: function subarray() { ... }, BYTES_PER_ELEMENT: 2, set: function set() { ... }}, BYTES_PER_ELEMENT: 2}
我的Chrome浏览器会在本机代码中实现此功能。
似乎String.fromCharCode
无法应用于类似对象的数组。