JS 判斷資料型別方法
阿新 • • 發佈:2021-09-29
JS資料型別主要分為
基本資料型別:Undefined
、Null
、Boolean
、Number
和String
應用型別:Object
、Array
和Function
型別判斷
1.對 boolean 型別的判斷總結
為false時:空字串 '' 、undefined、0、NAN、null
為true時:除上述false的情況都為true
此判斷會經常應用於判斷一個變數是否有返回的if 語句中
var o = { 'name':'lee' }; var a = ['reg','blue']; function checkBoolean(a){if(a){ return true; }else{ return false; } } console.log(checkBoolean('')); //false console.log(checkBoolean(0)); //false console.log(checkBoolean(null)); //false console.log(checkBoolean(undefined)); //false console.log(checkBoolean(NaN)); //false console.log(checkBoolean(a));//true console.log(checkBoolean(c));//true
2. typeof
var fn = function(n){ console.log(n); } var str = 'string'; var arr = [1,2,3]; var obj = { a:123, b:456 }; var num = 1; var b = true; var n = null; varu = undefined; //方法一使用typeof方法。 console.log(typeof str);//string console.log(typeof arr);//object console.log(typeof obj);//object console.log(typeof num);//number console.log(typeof b);//boolean console.log(typeof n);//null是一個空的物件 console.log(typeof u);//undefined console.log(typeof fn);//function
typeof檢測的Array和Object 結果都為object
3.instanceof
var o = { 'name':'lee' }; var a = ['reg','blue']; console.log(o instanceof Object);// true console.log(a instanceof Array);// true console.log(o instanceof Array);// false
console.log(a instanceof Object);// true 由於陣列也屬於物件因此我們使用instanceof判斷一個數組是否為物件的時候結果也會是true
instaceof只可以用來判斷陣列和物件,不能判斷string和boolean型別
下面為封裝方法進行改進
var o = { 'name':'lee' }; var a = ['reg','blue']; var getDataType = function(o){ if(o instanceof Array){ return 'Array' }else if( o instanceof Object ){ return 'Object'; }else{ return 'param is no object type'; } }; console.log(getDataType(o));//Object。 console.log(getDataType(a));//Array。
4.constructor
var o = { 'name':'lee' }; var a = ['reg','blue']; console.log(o.constructor == Object);//true console.log(a.constructor == Array);//true
此方法不能判斷 null 和 undefined。
5.tostring()
var o = { 'name':'lee' }; var a = ['reg','blue']; function c(name,age){ this.name = name; this.age = age; } var c = new c('kingw','27'); console.log(Object.prototype.toString.call(a));//[object Array] console.log(Object.prototype.toString.call(o));//[Object Object] console.log(Object.prototype.toString.call(c));//[Object Function] console.log(Object.prototype.toString.call(new c));//[Object Object]
function isType(obj){
var type = Object.prototype.toString.call(obj);
if(type == '[object Array]'){
return 'Array';
}else if(type == '[object Object]'){
return "Object" }
else{
return 'param is no object type'; }
}
console.log(isType(o));//Object console.log(isType(a));//Array
//下面是更簡潔的封裝,來自vue原始碼
var _toString = Object.prototype.toString;
function toRawType (value) {return _toString.call(value).slice(8, -1)}
6.JQ 的isPlainObject();.isPlainObject();.isArray(obj);$.isFunction(obj)進行判斷。