JavaScript ArrayBuffer 切片在 Safari 9.1.2 中明显损坏

Pat*_*tch 3 javascript safari

Safari 9.1.2 (10601.7.7) 中的基本 JavaScript 功能似乎被破坏。也许我只是做错了什么?正在寻找有关如何度过这一切的建议......

有问题的函数是ArrayBuffer.prototype.slice()

下面是一个在 Chrome 和 Firefox 中运行良好的使用示例,但在 Safari 中则不行。

var buffer = new ArrayBuffer(16);
var bufferView = new Uint8Array(buffer);
console.log(bufferView.slice(0,8)); // TypeError: bufferView.slice is not a function
Run Code Online (Sandbox Code Playgroud)

jpa*_*jpa 5

我只是把这个写出来作为答案,所有相关的事实都已经在评论中了(因此是社区维基)。

您正在调用.slice()对象Uint8Array,而不是ArrayBuffer,并且.slice()Safari 和 Internet Explorer 中的类型化数组不支持

相反,您可以使用bufferView.buffer.slice(), 或 Patch 编写的这个辅助方法:

if(!Uint8Array.prototype.slice)
{
    Uint8Array.prototype.slice = function(a,b){
        var Uint8ArraySlice = new Uint8Array(this.buffer.slice(a,b));
        return Uint8ArraySlice;
    }
}
Run Code Online (Sandbox Code Playgroud)