为什么 .slice() 不能与 Float32Array() 一起使用,而是与 Array() 一起使用? [JavaScript]

Why isn't .slice() working with Float32Array() but does with an Array()? [JavaScript]

出于某种原因,我无法让 .slice() 与 Float32Array 一起工作。如果将 Float32Array 替换为 Array,则效果非常好。 Float32Array 的文档将 .slice() 列为一种方法,所以我不明白是否存在错误或其他问题?或者是 2:00 上午,我看不到明显的东西?

function test()
{
    var buf = new Float32Array( 10 );
    for (var i = 0; i < 10; i++) {
        buf[i] = i*0.3;

    }
    var test = buf.slice(2,5);
    alert("Hello, Coding Ground!" + test[0]);
}
test();

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice

看起来只有 Firefox 支持该方法。

(从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array开始,沿继承链向上。)

勾选How to convert a JavaScript Typed Array into a JavaScript Array

function test()
{
    var buf = new Float32Array( 10 );
    var array =  Array.prototype.slice.call(buf);
    for (var i = 0; i < 10; i++) {
        array[i] = i*0.3;

    }
    var test = array.slice(2,5);
    alert("Hello, Coding Ground!" + test[0]);
}
test();

看起来它还没有在 Chrome 中,但它正在 Chrome Canary 中工作,这意味着它很快就会进入 Chrome。 运行 在控制台中查看 slice 是否已经工作。

new Float32Array().slice

出于性能方面的考虑,我不想将类型化数组转换为常规数组,因此我现在正在寻找解决方法。

编辑: 我刚刚为适合我的 Float32Array 切片编写了一个垫片。一旦 Chrome 开始支持切片方法,它将很快被忽略。

if (!Float32Array.prototype.slice) {
    Float32Array.prototype.slice = function (begin, end) {
        var target = new Float32Array(end - begin);

        for (var i = 0; i < begin + end; ++i) {
            target[i] = this[begin + i];
        }
        return target;
    };
}