Float32Array
如果您对它是一个或一个子类感到满意,Float32Array
并且它们将来自与您正在检查的代码相同的领域(松散地,窗口),请参阅 Anton 的答案,使用instanceof
.
如果您需要知道它具体是 aFloat32Array
而不是子类(并且它来自同一个领域),您可以使用yourObject.constructor === Float32Array
:
if (yourObject.constructor === Float32Array) {
// It's a Float32Array
}
现场示例:
if (typeof Float32Array === "undefined") {
console.log("This browser doesn't support Float32Array");
} else {
var array = new Float32Array(10);
console.log(array.constructor === Float32Array); // true
}
但请注意,如果对象源自不同的领域(如另一个框架),则会失败,因为不同的环境具有不同的Float32Array
构造函数(即使它们执行相同的操作)。
如果您需要支持constructor
不起作用的情况,您可以使用该Object.prototype.toString.call(yourObject)
技巧。这将为所有 JavaScript 内置类型(, 等)返回一个有用的字符串[object Array]
。[object Date]
根据规范,Object.prototype.toString
当应用于类型化数组时,必须以格式返回字符串"[object TypedArrayNameHere]"
。
所以:
if (Object.prototype.toString.call(yourObject) === "[object Float32Array]") {
// It's a Float32Array
}
现场示例:
if (typeof Float32Array === "undefined") {
console.log("This browser doesn't support Float32Array");
} else {
console.log("Object.prototype.toString.call(new Float32Array()) returns: \"" +
Object.prototype.toString.call(new Float32Array()) + "\"");
}
请注意,可以创建与其类型有关的对象,从而Object.prototype.toString
返回与 (say) 相同的返回值Float32Array
:
const real = new Float32Array();
const fake = {
get [Symbol.toStringTag]() {
return "Float32Array";
}
};
const realString = Object.prototype.toString.call(real);
const fakeString = Object.prototype.toString.call(fake);
console.log(realString);
console.log(fakeString);
console.log(realString === realString);
// You can also create a class that returns objects that lie:
class Foo {
get [Symbol.toStringTag]() {
return "Float32Array";
}
}
const fake2 = new Foo();
console.log(Object.prototype.toString.call(fake2));