使用typeof方法檢測數據類型
方法不嚴謹,在檢測數組和對象是都是object 類型的
// 使用typeof檢測數據類型
console.log(typeof (123)); //number
console.log(typeof ("123")); //string
console.log(typeof (true)); //boolean
console.log(typeof ([])); //object
console.log(typeof ({})); //object
console.log(typeof (null)); //object
console.log(typeof (function(){})); //function
console.log(typeof (undefined)); //undefined
萬能的數據類型檢測方式
這里由一個思考問題代入這個知識點
思考題:數組調用toString結果和對象調用toString結果為什么不一樣
//1.思考題:數組調用toString結果和對象調用toString結果為什么不一樣
//原因:Object原型中有toString,Array原型中也有toString
//根據變量訪問原型鏈成員規(guī)則:如果是數組調用toString訪問時Array原型中的toString
/*
Array.prototype.toString(): 底層調用數組join()
Object.prototype.toString(): 返回固定的字符串 [object 數據類型]
*/
console.log([1,2,3].toString());//1,2,3 [1,2,3].join()
console.log({name:'張三'}.toString());//[object Object]
console.log([]);
console.log([].toString());//''
console.log({}.toString());//[object Object]
//2.萬能數據類型檢測法
/*原理:既然Object.prototype.toString() 會返回一個固定格式的數據類型字符串,
只需要通過call修改this指向,就可以檢測所有的數據類型 */
//typeof關鍵字檢測null和array都會得到object,無法檢測
console.log(Object.prototype.toString.call('123'));//[object String]
console.log(Object.prototype.toString.call(123));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call({}));//[object Object]