面试之:判断js类型的方式总结

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>判断js类型的方式</title>
    </head>
    <body>
        <script type="text/javascript">
            // 先引出2个概念
            /*
                1、基本数据类型(存放在栈中):Undefined、Null、Boolean、Number、String、Symbol (ES6新增)
                2、引用数据类型(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置):Object 类型 【Object类型、Array类型、Date类型、RegExp类型、Function类型】
                引用类型的值是保存在 堆内存(Heap)中的对象(Object)
                与其他编程语言不同,JavaScript 不能直接操作对象的内存空间(堆内存)
            */
           // 1、typeof
           let  a = [1,2,3,4],
                b = 5,
                c = 'test',
                d = function() {
                    console.log('我是函数')
                },
                e = true,
                f = null,
                g;
                h = Symbol(42);
                j = new Date()
                console.log(typeof(a)); // object
                console.log(typeof(b)); // number
                console.log(typeof(c)); // string
                console.log(typeof(d)); // function
                console.log(typeof(e)); // boolean
                console.log(typeof(f)); // object
                console.log(typeof(g)); // undefined
                console.log(typeof(h)); // symbol
                console.log(typeof(j)); // object
            // 2、instanceof 判断该对象是谁的实例;内部机制是通过判断对象的原型链上是否能找到对象的proptype; 
            // object instanceof constructor
            console.log({} instanceof Object)              // true
            console.log([] instanceof Array)               // true
            console.log(/aa/g instanceof RegExp)           // true
            console.log(function(){} instanceof Function)  // true
            // 3、 js原生方法 Object.prototype.toString.call()常用于判断浏览器内置对象 它可以给出数据的确切类型,相比typeof要精确
            // 面试点:实现一个函数clone,可以对js中的5种主要的数据类型(包括number string object array Boolean)进行值复制 
            console.log(Object.prototype.toString.call(a)) // [object Array]
            console.log(Object.prototype.toString.call(b)) // [object Number]
            console.log(Object.prototype.toString.call(c)) // [object String]
            console.log(Object.prototype.toString.call(d)) // [object Function]
            console.log(Object.prototype.toString.call(e)) // [object Boolean]
            console.log(Object.prototype.toString.call(f)) // [object Null]
            console.log(Object.prototype.toString.call(g)) // [object Undefined]
            console.log(Object.prototype.toString.call(h)) // [object Symbol]
            console.log(Object.prototype.toString.call(j)) // [object Date]
            // 4.判断是否为数组 Array.isArray() [IE8及以下版本不支持此API] 还需要用到 Object.prototype.toString.call(arr) === "[object Array]";
        </script>
    </body>
</html>
原文地址:https://www.cnblogs.com/lhl66/p/13815985.html