检查ArrayBufferView的实例?

时间:2014-02-13 11:57:12

标签: javascript instanceof arraybuffer typedarray

背景

通过一些研究,我发现虽然ArrayBufferView最初没有暴露(通过[NoInterfaceObject]),但由于我描述的用例,似乎应该有广泛的一致意见。< / p>

最初的协议是在ArrayBufferView命名空间上公开DOMWindow构造函数,该命名空间在Safari中实现(并且仍在6.1.1中运行)和Chrome,但随后是pulled from Chrome赞成静态方法ArrayBuffer.isView()

与此同时,Mozilla(仍)talking about implementing ArrayBuffer.isView()

简而言之:

  • Safari公开了ArrayBufferView构造函数

  • Chrome已ArrayBuffer.isView()

  • Firefox没有任何内容

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

问题

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

2 个答案:

答案 0 :(得分:5)

我会使用:

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 :(得分:1)

我猜是更好的答案:

var arr = new Float64Array(100);

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

适用于Chrome&amp; Firefox,也许还有其他浏览器