Background
With a bit of research I've found that, although ArrayBufferView
wasn't initially exposed (through [NoInterfaceObject]) there appeared to be broad agreement that it should be, due to my described use case.
- Firefox
- Chrome
- Safari
The initial agreement was to expose the ArrayBufferView
constructor on the DOMWindow
namespace, which was implemented in Safari (and still works in 6.1.1) and Chrome, but was then pulled from Chrome in favour of a static method ArrayBuffer.isView()
.
Meanwhile, Mozilla are (still) talking about implementing ArrayBuffer.isView()
.
In brief:
Safari exposes the
ArrayBufferView
constructorChrome has
ArrayBuffer.isView()
Firefox has nothing
IE - I haven't even got near yet...
Question
So, my question. What's the most succinct way to check if an object is an instance of ArrayBufferView?
Background
With a bit of research I've found that, although ArrayBufferView
wasn't initially exposed (through [NoInterfaceObject]) there appeared to be broad agreement that it should be, due to my described use case.
- Firefox
- Chrome
- Safari
The initial agreement was to expose the ArrayBufferView
constructor on the DOMWindow
namespace, which was implemented in Safari (and still works in 6.1.1) and Chrome, but was then pulled from Chrome in favour of a static method ArrayBuffer.isView()
.
Meanwhile, Mozilla are (still) talking about implementing ArrayBuffer.isView()
.
In brief:
Safari exposes the
ArrayBufferView
constructorChrome has
ArrayBuffer.isView()
Firefox has nothing
IE - I haven't even got near yet...
Question
So, my question. What's the most succinct way to check if an object is an instance of ArrayBufferView?
Share Improve this question edited Feb 24, 2014 at 16:48 james asked Feb 13, 2014 at 11:57 jamesjames 4,5733 gold badges33 silver badges43 bronze badges 03 Answers
Reset to default 11I would use either:
function isAbv(value) {
return value && value.buffer instanceof ArrayBuffer && value.byteLength !== undefined;
}
or:
var ArrayBufferView = Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array)).constructor;
function isAbv(value) {
return value instanceof ArrayBufferView;
}
Better answer I guess:
var arr = new Float64Array(100);
arr instanceof (new Uint16Array()).constructor.prototype.__proto__.constructor //true
works in Chrome & Firefox, maybe other browsers too
ArrayBuffer.isView
is supported on all modern browsers.
const b = new Uint8Array()
ArrrayBuffer.isView(b) // true