Javascript 如何找到typedArray的类型?

Javascript 如何找到typedArray的类型?,javascript,arrays,typed-arrays,Javascript,Arrays,Typed Arrays,要测试对象是否是数组,有一个方法- constmyarray=[1,2,3,4]; Array.isArray(myarray); //返回true您可以对其使用.name属性。它应该返回类型:“Uint8Array”。这也适用于Uint16和Unint32 MDN: 编辑:添加源您可以对其使用.name属性。它应该返回类型:“Uint8Array”。这也适用于Uint16和Unint32 MDN: 编辑:添加源您可以使用与其构造函数的比较1: const int8=新的Uint8Array

要测试对象是否是数组,有一个方法-

constmyarray=[1,2,3,4];
Array.isArray(myarray);

//返回true
您可以对其使用
.name
属性。它应该返回类型:“Uint8Array”。这也适用于Uint16和Unint32

MDN:


编辑:添加源

您可以对其使用
.name
属性。它应该返回类型:“Uint8Array”。这也适用于Uint16和Unint32

MDN:


编辑:添加源

您可以使用与其构造函数的比较1

const int8=新的Uint8Array([0,1,2,3]);
console.log(int8.constructor==Uint8Array);
//所以你可以
函数CheckTypeDarray类型(someTypedArray){
常量类型DarrayTypes=[
Int8Array,
UINT8阵列,
Uint8ClampedArray,
Int16Array,
UINT16阵列,
Int32Array,
UINT32阵列,
浮点数组,
浮点数组,
BigInt64Array,
Biguint64阵列
];
const checked=typedArrayTypes.filter(ta=>someTypedArray.constructor===ta);
返回checked.length&&checked[0]。名称| | null;
}
console.log(checkTypedArrayType(int8));
//但这可以大大简化
函数检查类型DarrayType2(someTypedArray){
返回someTypedArray&&
someTypedArray.constructor&&
someTypedArray.constructor.name | |
无效的
}
console.log(checkTypedArrayType2(int8));
//这实际上可以推广到
const whatsMyType=someObject=>
someObject&
someObject.constructor&&
someObject.constructor.name&&
someObject.constructor.name | |
无效的
log(whatsMyType(int8));
log(whatsMyType([1,2,3,4]);
log(whatsMyType(“hello!”)

console.log(whatsMyType(/[a-z]/i))
您可以使用与其构造函数的比较1

const int8=新的Uint8Array([0,1,2,3]);
console.log(int8.constructor==Uint8Array);
//所以你可以
函数CheckTypeDarray类型(someTypedArray){
常量类型DarrayTypes=[
Int8Array,
UINT8阵列,
Uint8ClampedArray,
Int16Array,
UINT16阵列,
Int32Array,
UINT32阵列,
浮点数组,
浮点数组,
BigInt64Array,
Biguint64阵列
];
const checked=typedArrayTypes.filter(ta=>someTypedArray.constructor===ta);
返回checked.length&&checked[0]。名称| | null;
}
console.log(checkTypedArrayType(int8));
//但这可以大大简化
函数检查类型DarrayType2(someTypedArray){
返回someTypedArray&&
someTypedArray.constructor&&
someTypedArray.constructor.name | |
无效的
}
console.log(checkTypedArrayType2(int8));
//这实际上可以推广到
const whatsMyType=someObject=>
someObject&
someObject.constructor&&
someObject.constructor.name&&
someObject.constructor.name | |
无效的
log(whatsMyType(int8));
log(whatsMyType([1,2,3,4]);
log(whatsMyType(“hello!”)

console.log(whatsMyType(/[a-z]/i))
对于TypedArrays,实际上有一个与Array.isArray等效的文件,可在
ArrayBuffer
构造函数上访问:

但是请注意,对于DataView对象,它也将返回true,因此如果您确实想知道某个对象是否为TypedArray,只需执行以下操作:

函数为类型数组(arr){
返回ArrayBuffer.isView(arr)和&!(数据视图的arr实例);
}
功能测试(val){
console.log(isTypedArray(val));
}
测试(假);//错误的
测试(空);//错误的
测试([]);//错误的
测试(新阵列缓冲器(12));//错误的
测试(新数据视图(新阵列缓冲区(12));//错误的
测试(新UINT8阵列(12));//符合事实的

测试(新的BigInt64阵列(12));//是的
对于TypedArrays,实际上有一个与Array.isArray等效的程序,可在
ArrayBuffer
构造函数上访问:

但是请注意,对于DataView对象,它也将返回true,因此如果您确实想知道某个对象是否为TypedArray,只需执行以下操作:

函数为类型数组(arr){
返回ArrayBuffer.isView(arr)和&!(数据视图的arr实例);
}
功能测试(val){
console.log(isTypedArray(val));
}
测试(假);//错误的
测试(空);//错误的
测试([]);//错误的
测试(新阵列缓冲器(12));//错误的
测试(新数据视图(新阵列缓冲区(12));//错误的
测试(新UINT8阵列(12));//符合事实的

测试(新的BigInt64阵列(12));//是的另一种方法是,您可以使用类型化数组的
字节/元素属性

如其他答案中所述,要获得实际类型,可以使用
构造函数.name
。重用上面的
isTypedArray
函数,您可以这样编写

function getType(obj){
    return Array.isTypedArray(obj) ? obj.constructor.name: (typeof obj)
}
示例代码&console.log

Array.isTypedArray=函数(inArray){
如果(inArray){
const prototype=Object.getPrototypeOf(inArray);
返回prototype?prototype.hasOwnProperty(“每个元素的字节”):false;
}
返回false;
}

log(“'Iam'类型化数组另一种方法可能是,您可以利用类型化数组的
每个元素的字节数
属性

如其他答案中所述,要获得实际类型,可以使用
构造函数.name

function getType(obj){
    return Array.isTypedArray(obj) ? obj.constructor.name: (typeof obj)
}
示例代码&console.log

Array.isTypedArray=函数(inArray){
如果(inArray){
const prototype=Object.getPrototypeOf(inArray);
返回prototype?prototype.hasOwnProperty(“每个元素的字节”):false;
}
返回false;
}

console.log(“'Iam'是一个类型化数组,它仅在构造函数上可用,而在instance@Kaiido给定一个实例,你可以获得构造函数。@AluanHaddad当然,我从来没有说过相反的话,但是说“你可以在它上面使用
.name
属性。”是一个谎言。@Kaido这是真的。作者应该修改它。不依赖于