使用typeof方法檢測(cè)數(shù)據(jù)類型
方法不嚴(yán)謹(jǐn),在檢測(cè)數(shù)組和對(duì)象是都是object 類型的
// 使用typeof檢測(cè)數(shù)據(jù)類型
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
萬(wàn)能的數(shù)據(jù)類型檢測(cè)方式
這里由一個(gè)思考問題代入這個(gè)知識(shí)點(diǎn)
思考題:數(shù)組調(diào)用toString結(jié)果和對(duì)象調(diào)用toString結(jié)果為什么不一樣
//1.思考題:數(shù)組調(diào)用toString結(jié)果和對(duì)象調(diào)用toString結(jié)果為什么不一樣
//原因:Object原型中有toString建钥,Array原型中也有toString
//根據(jù)變量訪問原型鏈成員規(guī)則:如果是數(shù)組調(diào)用toString訪問時(shí)Array原型中的toString
/*
Array.prototype.toString(): 底層調(diào)用數(shù)組join()
Object.prototype.toString(): 返回固定的字符串 [object 數(shù)據(jù)類型]
*/
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.萬(wàn)能數(shù)據(jù)類型檢測(cè)法
/*原理:既然Object.prototype.toString() 會(huì)返回一個(gè)固定格式的數(shù)據(jù)類型字符串,
只需要通過call修改this指向,就可以檢測(cè)所有的數(shù)據(jù)類型 */
//typeof關(guān)鍵字檢測(cè)null和array都會(huì)得到object,無(wú)法檢測(cè)
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]