私はその他を保持する配列を持っています。コンテンツ、および対応するインデックスでデータのタイプを保持する新しい配列を何らかの方法で作成する必要があるため、次を使用してみました:
typeof ( ["my", "misc", new Data] ),
しかし、それは私が期待しているものではありません...そのような配列を生成する方法はありますか?
私はその他を保持する配列を持っています。コンテンツ、および対応するインデックスでデータのタイプを保持する新しい配列を何らかの方法で作成する必要があるため、次を使用してみました:
typeof ( ["my", "misc", new Data] ),
しかし、それは私が期待しているものではありません...そのような配列を生成する方法はありますか?
これは、関数を使用して実現できます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()
または、ワンライナーを使用して同じことを達成するために使用することもできます:)
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;
}