jsデータタイプと判定データタイプの方法
3416 ワード
基本データタイプ:String、Number、Boolean、Symbol、undefined、Null引用タイプ:Object Aray Function
データの種類を判断する方法:
jsのデータの種類を判断する方法はいくつかあります.typeof、instance of、constructor、prototype、$.type()/jquery.type()、次にこれらの方法の違いを比較します.
いくつかの例を挙げます.
instance of原理:instancentofは、オブジェクトAが別のオブジェクトBの例であるかどうかを検出する原理は、オブジェクトBのprototypeが指すオブジェクトがオブジェクトAの[prototype]チェーン上にあるかを確認することである.もしいるなら、trueに戻り、いないならfalseに戻ります.ただし、オブジェクトBのプロトタイプがnullである場合はエラーが発生します.
データの種類を判断する方法:
jsのデータの種類を判断する方法はいくつかあります.typeof、instance of、constructor、prototype、$.type()/jquery.type()、次にこれらの方法の違いを比較します.
いくつかの例を挙げます.
var a = "iamstring.";
var b = 222;
var c= [1,2,3];
var d = new Date();
var e = function(){alert(111);};
var f = function(){this.name="22";};
1、最も一般的な判断方法:typeofalert(typeof a) ------------> string
alert(typeof b) ------------> number
alert(typeof c) ------------> object
alert(typeof d) ------------> object
alert(typeof e) ------------> function
alert(typeof f) ------------> function
typeof , , :
alert(typeof a == "string") -------------> true
alert(typeof a == String) ---------------> false
typeof function ; Object 。
2、既知のオブジェクトタイプを判断する方法:instance ofinstance of原理:instancentofは、オブジェクトAが別のオブジェクトBの例であるかどうかを検出する原理は、オブジェクトBのprototypeが指すオブジェクトがオブジェクトAの[prototype]チェーン上にあるかを確認することである.もしいるなら、trueに戻り、いないならfalseに戻ります.ただし、オブジェクトBのプロトタイプがnullである場合はエラーが発生します.
alert(c instanceof Array) ---------------> true
alert(d instanceof Date)
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false
3、対象のconstructorによって判断する:constructoralert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true
: constructor
eg:
function A(){};
function B(){};
A.prototype = new B(); //A B
var aObj = new A();
alert(aobj.constructor === B) -----------> true;
alert(aobj.constructor === A) -----------> false;
, construtor constructor :
aobj.constructor = A; // constructor
alert(aobj.constructor === A) -----------> true;
alert(aobj.constructor === B) -----------> false; // true ;
4、通用するが、煩わしい方法:prototypealert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
, , 。
5、無敵万能方法jquery.type() undefined null, “undefined” “null”。
jQuery.type( undefined ) === "undefined"
jQuery.type() === "undefined"
jQuery.type( window.notDefined ) === "undefined"
jQuery.type( null ) === "null"
[[Class]] [[Class]] , [[Class]] 。
jQuery.type( true ) === "boolean"
jQuery.type( 3 ) === "number"
jQuery.type( "test" ) === "string"
jQuery.type( function(){} ) === "function"
jQuery.type( [] ) === "array"
jQuery.type( new Date() ) === "date"
jQuery.type( new Error() ) === "error" // as of jQuery 1.9
jQuery.type( /test/ ) === "regexp"
“object”。
通常はtypeofで判断すればいいですが、予知Objectのタイプがある場合はinstance ofまたはconstructの方法を選択できます.仕方なく$type()を使います.