我正在尝试Uint16Array()
(这对我来说是js中的新东西)我创建了一个包含5个数字的数组:
var test = new Uint16Array(5);
然后为每个单元格分配一个数字。
然后当我在我的控制台中尝试typeof
时,测试返回"object"
,但当我alert(test)
时,消息框返回[object Uint16Array]
。我的问题是如何检查确切类型的变量/数组“test”,如alert返回?
如果我弄错了,请更正我,但是为了数据使用特定的变量类型会更高效,而且主流浏览器是否支持它?
提前谢谢。
答案 0 :(得分:3)
如果要专门检查变量是否属于Uint16Array类型,可以使用instanceof:
var test = new Uint16Array(5);
console.log(test instanceof Uint16Array)
将导致true
:
有关实例的更多信息,请参阅What is the instanceof operator in JavaScript?
答案 1 :(得分:1)
数组实际上是一个对象
typeof [1,2,3]
将返回"object"
。
现在,当您执行警报(数组)时,您实际上正在调用格式化结果字符串的Object.prototype.toString()
方法。在这种情况下[object Uint16Array]
。
Typeof返回对象,因为它是一个对象。尽管您初始化了 Uint16Array ,但它仍然是一个对象:)。例如:
function car() {}
var c = new car();
typeof c === 'object' // => true
数字,字符串,对象等是通用数据类型。看here for js datatypes。
检查确切类型的丑陋方法是:
array.toString().split(/\b/g)[3]
为什么索引3?因为返回的字符串是[对象类型];部件是这样的:
答案 2 :(得分:1)
您可以使用三元相等运算符(===
)更精确地测试Javascript中的类型,以便typeof(function() { }) === 'function'
之类的内容返回true。但是,Uint16Array是一个构造函数,它创建一个Array对象,因此它的任何衍生物也都是一个对象。
至于在浏览器中提高效率,你可以将这种优化视为“太努力”,因为它不会为你节省太多(如果有的话)明显的速度或效率。当然,对于您的数据很大的情况,有一些警告,但通常您不会看到通过编程来改进Javascript中的类型。这并不是说它毫无价值,只是在大多数情况下它通常不值得。
答案 3 :(得分:1)
如何检查变量/数组“test”的确切类型,如alert返回?
使用Object.prototype.toString
获取对象的内部[[Class]]值。您的提醒似乎已使用此方法,因为Uint16Array.prototype
不会覆盖它,而不是Array.prototype
。一些例子:
Object.prototype.toString.call( {} ); // [object Object]
Object.prototype.toString.call( [] ); // [object Array]
Object.prototype.toString.call( new Uint16Array(5) ); // [object Uint16Array]