使用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
//根据变量访问原型链成员规则:如果是数组调用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]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。