检查ArrayBufferView的实例?

14

背景

通过一些研究,我发现尽管最初未通过[NoInterfaceObject]公开ArrayBufferView,但由于我的使用情况,似乎达成了广泛的共识,它应该被公开。

最初的协议是在DOMWindow名称空间上公开ArrayBufferView构造函数,在Safari(仍可在6.1.1中使用)和Chrome中实现,但随后在Chrome中被取消,改为使用静态方法ArrayBuffer.isView()

同时,Mozilla(仍然)在讨论中实现ArrayBuffer.isView()

简而言之:

  • Safari公开ArrayBufferView构造函数

  • Chrome有ArrayBuffer.isView()

  • Firefox没有

  • IE-我甚至还没有接近...

问题

那么,我的问题。检查一个对象是否是ArrayBufferView的实例最简洁的方法是什么?

3个回答

10
我会使用以下两种方式之一:

function isAbv(value) {
    return value && value.buffer instanceof ArrayBuffer && value.byteLength !== undefined;
}

或者:

var ArrayBufferView = Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;
function isAbv(value) {
    return value instanceof ArrayBufferView;
}

1
更好的答案,我想:
var arr = new Float64Array(100);

arr instanceof (new Uint16Array()).constructor.prototype.__proto__.constructor //true

适用于Chrome和Firefox,可能也适用于其他浏览器


0

ArrayBuffer.isView 在所有现代浏览器上都得到了支持

const b = new Uint8Array()
ArrrayBuffer.isView(b) // true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接