检查ArrayBufferView的实例?

jam*_*mes 9 javascript instanceof typedarray arraybuffer

背景

通过一些研究我发现,虽然ArrayBufferView最初没有公开(通过[NoInterfaceObject]),但由于我描述的用例,似乎应该有广泛的一致意见.

最初的协议是ArrayBufferViewDOMWindow命名空间上公开构造函数,该命名空间在Safari(并且仍然在6.1.1中)和Chrome中实现,但随后从Chrome提取,转而使用静态方法ArrayBuffer.isView().

与此同时,Mozilla(仍在)谈论实施 ArrayBuffer.isView().

简单来说:

  • Safari公开了ArrayBufferView构造函数

  • Chrome有 ArrayBuffer.isView()

  • Firefox什么都没有

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

所以,我的问题.检查对象是否是ArrayBufferView实例的最简洁方法是什么?

Joe*_*ard 5

我会使用:

function isAbv(value) {
    return value && value.buffer instanceof ArrayBuffer && value.byteLength !== undefined;
}
Run Code Online (Sandbox Code Playgroud)

要么:

var ArrayBufferView = Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;
function isAbv(value) {
    return value instanceof ArrayBufferView;
}
Run Code Online (Sandbox Code Playgroud)