【发布时间】:2013-09-03 03:23:38
【问题描述】:
我有一个包含杂项的数组。内容,我需要以某种方式生成一个新数组,该数组将在对应索引处保存数据类型,我尝试使用:
typeof ( ["my", "misc", new Data] ),
但它没有给我我所期望的...... 有没有办法生成这样的数组?
【问题讨论】:
-
看看我的回答,我想这就是你可能要找的。span>
标签: javascript arrays typeof
我有一个包含杂项的数组。内容,我需要以某种方式生成一个新数组,该数组将在对应索引处保存数据类型,我尝试使用:
typeof ( ["my", "misc", new Data] ),
但它没有给我我所期望的...... 有没有办法生成这样的数组?
【问题讨论】:
标签: javascript arrays typeof
这可以使用map 函数来实现。
var types = ["my", "misc", new Data].map(function (item) {
return typeof item;
});
但是,我认为这可能是您正在寻找的:
var types = ["my", "misc", new Data].map(function (item) {
var name = item.constructor && item.constructor.name;
return name? name: typeof item;
});
请注意,Function.name 不是标准的,根据您声明函数的方式,可能没有任何可靠的方法可以找到函数的名称。
【讨论】:
您的代码不起作用,因为typeof 在数组上下文中不起作用,它只会返回您的数组类型,即object。
跨浏览器解决方案是使用原始数组的每个对应元素的类型构建一个新数组:
var arr = ["my", "misc", new Data()];
var types = [];
for (var i = 0; i < arr.length; ++i) {
types.push(typeof(arr[i]));
}
或者,您也可以使用Array.map() 来完成同样的任务:)
【讨论】:
Array.prototype.map 并使用方便的工具 ;-)
function type( o ) {
var out = typeof o;
(
(
out =
( o && o.constructor === window.constructor ) && 'window'
|| ( ( Object.prototype.toString.call( o ) ).match( /\b(\w+)\]$/ ) )[1].toLowerCase()
) === 'number'
)
&& ( isNaN( o ) && ( out = 'NaN' ) );
return out;
}
【讨论】: