JavaScriptでは、変数は配列、関数、またはオブジェクトの種類をどう判断しますか?

2285 ワード

配列ECMAScript 5におけるAray.isArayは、元の判定配列の方法であり、IE 9及び以上のサポートがあります.互換性を考慮して、この方法がないブラウザでは、Object.prototype.toString.call(obj)===''object Aray'を使って代替することができます.
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;

}