2016-08-24 80 views
2

Safari 9.1.2(10601.7.7)中似乎破壞了基本的JavaScript函數。也許我只是做錯了什麼?有問題找一本關於如何過去這方面的工作的建議......JavaScript中的ArrayBuffer切片顯然在Safari 9.1.2中破碎

功能是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 
+0

在什麼意義上它不工作?有錯誤嗎?有什麼奇怪的事情發生? – Pointy

+0

你是什麼意思,它是「壞了?」你有錯誤嗎?它是否給你錯誤的選擇? –

+0

@Pointy,當我運行代碼時,Safari的web檢查器告訴我:TypeError:bufferView.slice不是函數。 (在'bufferView.slice(0,8)'中,'bufferView.slice'是undefined) – Patch

回答

3

我只是把它寫出來作爲答案,所有相關的事實都已經在評論中(因此社區wiki)。

您在Uint8Array對象上調用.slice(),而不是ArrayBuffer.slice() is not supported on typed arrays in Safari and Internet Explorer

相反,你可以使用bufferView.buffer.slice(),或補丁寫這個輔助方法:

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