typeof能判断哪些数据类型?

// 判断所有值类型
let a;                   typeof a //'undefined'
const str='abc';         typeof str//'string'
const n=100;             typeof n //'number'
const b=true;            typeof b //'boolen'
const s=Symbol('s');     typeof s //'symbol',注意symbol怎么声明的

// 能判断函数
typeof console.log                //'funcction'
typeof function(){}                //'funcction'

// 能识别引用类型(不能再继续识别)
typeof null          //'object'
typeof ['s','b']      //'object'
typeof {x:100}       //'object'

常见值类型

let a                    //undefined
const s='abc'
const n=100
const b=true
const s=Symbol('s')

常见引用类型

const obj={x:100}
const arr=['a','b','c']
const n=null        //特殊引用类型,指针指向为空地址
function fn(){}        //特殊引用类型,但不用于存储数据,所有没有“拷贝、复制函数”这一说
      

值类型和引用类型的区别
image.png
image.png
image.png
image.png

值类型放在栈里,栈从上往下排列
引用类型放在堆里,堆从下往上排列
为什么值类型是直接赋值,引用类型得复用内存地址是这样一个赋值形式:
因为考虑到性能问题,存储问题,
因为像值类型它的占用空间是比较少的,所以可以直接赋值没问题,
复制的时候也不会对性能造成很大的影响,引用类型就不一样了,
一个对象一个json可能非常大,
第一个会不好管理,
第二会在复制过程中非常慢。
所以值类型和引用类型的存储机制,赋值机制,拷贝机制都是严格的分开的,
它是基于内存的空间和CPU的耗时来做的这个一个区分,它是不得已而为之。
        

值类型,引用类型的拷贝,我们怎么去做深拷贝
https://segmentfault.com/a/11...

判断数据类型的方法(划重点来了,这是重点)
怎么判断一个变量是不是对象等问题的方法
对象原型

function dataType(data) {
        data = Object.prototype.toString.call(data);
        var type = {
            '[object String]': 'string',//字符串
            '[object Object]': 'object', //{}
            '[object Number]': 'number',//数字
            '[object Array]': 'array',//数组
            '[object Date]': 'date',//日期
            '[object Function]': 'function',//函数
            '[object Boolean]': 'boolean',//布尔值
            '[object Null]': 'null'//null
        };
        return type[data];
    }

kangting
62 声望3 粉丝

一只小小的前端