JSタイプ判定

3026 ワード

JSデータタイプ判定
時には判断データの種類が必要で、各種の複雑な論理判断に対応して、先に私達の最も常用したのに来ます.
1.typeof
typeofオペレータは文字列を返し、変数の種類を表します.
typeof oper/typeof(operand)
var testString = 'adus',
    testArray = [],
    testBoolean = true,
    testNumber = 0,
    testObject = {},
    testNull = null,
    testUndefined = undefined
    
console.log(typeof testString);//string
console.log(typeof testArray);//object
console.log(typeof testBoolean);//boolean
console.log(typeof testNumber);//number
console.log(typeof testObjec);//object
console.log(typeof testNull);//object
console.log(typeof testUndefined);//undefined

もちろんこれらの基礎タイプだけではなく、以下のようなものもあります.

Symbol (ECMAScript 6   )    "symbol"

    ( JS    )    Implementation-dependent

    ([[Call]]  ECMA-262      )    "function"

えっ?ちょっと違っていますが、どうして配列やnullなどは全部objectですか?下を見てください
Function  Array          ,      Object         。          。 

  JavaScript       ,JavaScript                        。         0。

   null         (         0x00)。

  ,null          0,typeof null       "object"。(reference)

2.instance of
instance of演算子は、オブジェクトのプロトタイプ属性が、オブジェクトのプロトタイプチェーン内の任意の位置にあるかどうかをテストするために使用されます.一般的には、変数があるオブジェクトの例です.
object instance of construct
objectが検出する対象/construct配置関数
function fnc(){}
var newFnc = new fnc();
console.log(newFnc.__proto__ == fnc.prototype);//true
console.log( newFnc instanceof fnc ) //true


/*String   Date     Object         */

var simpleStr = "This is a simple string"; 
var myString  = new String();
var newStr    = new String("String created with constructor");
var myDate    = new Date();
var myObj     = {};
var myNonObj  = Object.create(null);

simpleStr instanceof String; //    false,          undefined
myString  instanceof String; //    true
newStr    instanceof String; //    true
myString  instanceof Object; //    true

myObj instanceof Object;    //    true,         
({})  instanceof Object;    //    true,   
myNonObj instanceof Object; //    false,          ,           Object     

myString instanceof Date; //   false

myDate instanceof Date;     //    true
myDate instanceof Object;   //    true
myDate instanceof String;   //    false
3.Object.prototype.toString()
各オブジェクトには、一つのテキスト値として表示されるオブジェクト、または一つのオブジェクトが予定の文字列で参照されるときに自動的に呼び出しられます.デフォルトでは、toString()メソッドは各Objectオブジェクトに引き継がれます.この方法がカスタムオブジェクトに上書きされていない場合、toString()は「Object type」に戻り、typeはオブジェクトの種類です.
Funtion.prototype.call/Function.prototype.appy
検査対象を伝達することを最初のパラメータとして、thisArgといいます.
var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
適切な場面で適切な方法を使うと、手間が省けますし、コードの簡潔さ、丈夫さも保証できます.