我有一个持有misc的数组。内容,我需要以某种方式生成一个新的数组,将相应的索引保存数据类型,我尝试使用:
typeof ( ["my", "misc", new Data] ),
但这并不是我所期待的...... 有没有办法生成这样的数组?
答案 0 :(得分:1)
这可以使用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
不是标准的,根据您声明功能的方式,可能没有任何可靠的方法来查找函数的名称。
答案 1 :(得分:1)
您的代码不起作用,因为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()
使用单行完成相同的操作:)
答案 2 :(得分:0)
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;
}