天天看點

js判斷資料類型判斷資料類型

判斷資料類型

隐式轉換

0,’’,NaN,false,null,undefined,會轉化為false
if (undefined == true) {
    console.log('true');
} else {
    console.log('false');
}
//結果輸出false           

複制

var str = 'abc'
var num = 1
var bool = true
var arr = [1, 2, 3]
var obj = { name: 'haoxl', age: 18 }
var fun = function () { console.log('I am a function') }
var und = undefined
var nul = null
var str1 = new String(123)
var num1 = new Number(123)
var bool1 = new Boolean(true)
var arr1 = new Array([])
var obj1 = new Object({})
var fun1 = new Function('a', 'b')           

複制

typeof

typeof,傳回的結果用該類型的字元串(全小寫字母)形式

缺點:對象,數組,null,以及是以new的東西,都傳回object

console.log(typeof str);    //string
console.log(typeof num);    //number
console.log(typeof bool);   //boolean
console.log(typeof arr);    //object
console.log(typeof obj);    //object
console.log(typeof fun);    //function
console.log(typeof und);    //undefined
console.log(typeof nul);    //object
console.log(typeof str1);   //object
console.log(typeof num1);   //object
console.log(typeof bool1);  //object
console.log(typeof arr1);   //object
console.log(typeof obj1);   //object
console.log(typeof fun1);   //function           

複制

instanceof

A instanceof B,A對象是不是B構造函數構造出來的。A對象的原型鍊上有沒有B的原型。

instanceof不能差別undefined和null,

而且對于基本類型如果不是用new聲明的則也測試不出來,

對于是使用new聲明的類型,它還可以檢測出多層繼承關系。

console.log(str instanceof String, str instanceof Object);      // false,false
console.log(num instanceof Number, num instanceof Object);      // false,false
console.log(bool instanceof Boolean, bool instanceof Object);   // false,false
console.log(arr instanceof Array, arr instanceof Object);       // true,true
console.log(obj instanceof Object);                             // true
console.log(fun instanceof Function, fun instanceof Object);    // true,true
console.log(und instanceof Object);                             // false
console.log(nul instanceof Object);                             // false
console.log(str1 instanceof String, str1 instanceof Object);    // true,true
console.log(num1 instanceof Number, num1 instanceof Object);    // true,true
console.log(fun1 instanceof Function, fun1 instanceof Object);  // true,true
console.log(obj1 instanceof Object);                            // true           

複制

constructor

可以判斷數組和對象,

缺點:undefined和null沒有contructor屬性

console.log(str.constructor === String, str.constructor === Object);        // true,false
console.log(num.constructor === Number, num.constructor === Object);        // true,false
console.log(bool.constructor === Boolean, bool.constructor === Object);     // true,false
console.log(arr.constructor === Array, arr.constructor === Object);         // true,false
console.log(obj.constructor === Object);                                    // true
console.log(fun.constructor === Function, fun.constructor === Object);      // true,false
console.log(str1.constructor === String, str1.constructor === Object);      // true,false
console.log(num1.constructor === Number, num1.constructor === Object);      // true,false
console.log(bool1.constructor === Boolean, bool1.constructor === Object);   // true,false
console.log(arr1.constructor === Array, arr1.constructor === Object);       // true,false
console.log(obj1.constructor === Object);                                   // true
console.log(fun1.constructor === Function, fun1.constructor === Object);    // true,false           

複制

Object.prototype.toString.call()

原理:toStirng方法傳回一個變量(包含對象)的字元串表示方式。

toString方法是Objectde 原型方法,如果直接調用toString()方法,會先經過一個包裝類的過程,然後調用包裝類上面繼承并重寫過的toString()
console.log("jerry".toString());    //jerry
console.log((1).toString());        //1
console.log([1,2].toString());      //1,2
console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中國标準時間)
console.log(function(){}.toString());//function (){}           

複制

驗證:
var arr=[1,2,3];
console.log(Array.prototype.hasOwnProperty("toString"));//true
console.log(arr.toString());//1,2,3
delete Array.prototype.toString;//删除執行個體屬性
console.log(Array.prototype.hasOwnProperty("toString"));//false
console.log(arr.toString());//"[object Array]"           

複制

console.log(Object.prototype.toString.call(str));   //[object String]
console.log(Object.prototype.toString.call(num));   //[object Number]
console.log(Object.prototype.toString.call(bool));  //[object Boolean]
console.log(Object.prototype.toString.call(arr));   //[object Array]
console.log(Object.prototype.toString.call(obj));   //[object Object]
console.log(Object.prototype.toString.call(fun));   //[object Function]
console.log(Object.prototype.toString.call(und));   //[object Undefined]
console.log(Object.prototype.toString.call(nul));   //[object Null]

//使用正則擷取[object Function]裡面的資料類型
var regstr = '[object Function]'
var res = regstr.match(/\s+(\w+)/)
console.log(res[1]);           

複制

本文參與 騰訊雲自媒體分享計劃 ,歡迎熱愛寫作的你一起參與!

本文分享自作者個人站點/部落格

https://www.hsslive.cn

複制

如有侵權,請聯系 [email protected] 删除。