JavaScriptでは、変数は配列、関数、またはオブジェクトの種類をどう判断しますか?
2285 ワード
配列ECMAScript 5におけるAray.isArayは、元の判定配列の方法であり、IE 9及び以上のサポートがあります.互換性を考慮して、この方法がないブラウザでは、Object.prototype.toString.call(obj)===''object Aray'を使って代替することができます.
対象はJavaScriptで複雑なタイプが対象で、関数も対象です.上記2者にtypeofを使うと、それぞれ「object」と「function」を得ることができます.また、null値を除外する場合は、typeof nullが得られるのも「object」です.
var isArray = Array.isArray || function(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
関数が一番簡単で性能がいい方法は、typeof obj='function'です.いくつかのバージョンのブラウザの存在を考慮して、最も信頼できる方法はObject.prototype.toString.call(obj)==''object Funct'です.var isFunction = function(obj) {
return Object.prototype.toString.call(obj) === '[object Function]';
}
if(typeof /./ != 'function' && typeof Int8Array != 'object') {
isFunction = function(obj) {
return typeof obj == 'function';
}
}
注意:IE 678では、DOMオブジェクトの原生法については、typeofを使ってもObject.prototype.toStringを使っても、Objectを返します.これらのブラウザでは、JScriptエンジンは単独で実装され、ブラウザのカーネルに統合されていないからです.IE 9以降はJScriptエンジンがブラウザ内核に入り、DOMの原生方法を正しく認識することができる.対象はJavaScriptで複雑なタイプが対象で、関数も対象です.上記2者にtypeofを使うと、それぞれ「object」と「function」を得ることができます.また、null値を除外する場合は、typeof nullが得られるのも「object」です.
var isObject = function(obj) {
var type = typeof obj;
return type === 'function' || type === 'object' && !!obj;
}