使用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]

芹丸子
40 声望4 粉丝

所有文章都是自己的学习记录,如果对你有帮助我很荣幸,如果文章记录之处有什么不对不好的地方还请指教