判斷資料類型
隐式轉換
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] 删除。