1

我正在试验Uint16Array()(这在 js 中对我来说是新事物)并且我创建了一个由 5 个数字组成的数组,如下所示:

var test = new Uint16Array(5);

然后为每个单元格分配一个编号。

然后当我尝试在我的控制台typeof测试返回"object"时,虽然当我返回alert(test)消息框时。我的[object Uint16Array]问题是如何检查变量/数组“测试”的确切类型,如警报返回?

如果我弄错了,请纠正我,但这不是更有效,为您的数据使用特定的变量类型,而且主流浏览器是否支持它?

先感谢您。

4

4 回答 4

3

如果要专门检查一个变量是否为 Uint16Array 类型,可以使用 instanceof:

var test = new Uint16Array(5);
console.log(test instanceof Uint16Array)

将导致true

有关 instanceof 的更多信息,请参阅JavaScript 中的 instanceof 运算符是什么?

于 2013-10-09T09:42:18.987 回答
1

您可以使用三等式运算符 ( ===) 更精确地测试 Javascript 中的类型,这样类似的东西typeof(function() { }) === 'function'就会返回 true。但是,Uint16Array 是一个创建 Array 对象的构造函数,因此它的任何派生类也将是一个对象。

就在浏览器中提高效率而言,您可以将这种优化算作“太努力了”,因为它不会为您节省太多(如果有的话)显着的速度或效率。当然,在你的数据很大的地方有一些警告,但通常你不会看到通过对 Javascript 类型进行编程来改进。这并不是说它一文不值,只是在大多数情况下它通常不会成为值得的东西。

于 2013-10-09T09:39:40.227 回答
1

如何检查变量/数组“测试”的确切类型,例如返回的警报?

用于Object.prototype.toString获取对象的内部 [[Class]] 值。您的警报似乎使用了这种方法,因为Uint16Array.prototype它不会覆盖它,而不是 eg Array.prototype。一些例子:

Object.prototype.toString.call( {} ); // [object Object]
Object.prototype.toString.call( [] ); // [object Array]
Object.prototype.toString.call( new Uint16Array(5) ); // [object Uint16Array]
于 2013-10-09T09:42:23.183 回答
1

数组实际上是一个对象,所以

typeof [1,2,3]

将返回"object"

现在,当您执行 alert(array) 时,您实际上是在调用Object.prototype.toString()格式化结果字符串的方法。在这种情况下[object Uint16Array]

Typeof 返回对象,因为它是一个对象。尽管您初始化了 Uint16Array - 它仍然是一个对象:)。例如:

function car() {}
var c = new car();
typeof c === 'object' // => true

数字、字符串、对象等是通用数据类型。在此处查找js 数据类型

检查确切类型的一种丑陋方法是:

array.toString().split(/\b/g)[3]

为什么要索引 3 ?因为返回的字符串是[对象类型];所以零件是这样的:

  • 0 - [
  • 1 - 对象
  • 3 - 空间
  • 4 型
  • 5 - ]
于 2013-10-09T09:36:19.380 回答