很多问题看似复杂,没有章法,事实上却有着千丝万缕的联系,陈道长此次阐述因为数据类型不同而引发的问题,本文主要探讨JS函数参数传递规则、浅拷贝、深拷贝的原理。
变量类型和存储
首先要明确js中变量的特点,JS变量本身没有类型,只有值有类型。这句话怎么理解呢,先看下面这段代码。
let a = 42
typeof a //'number'
注意返回的是’number’,不是number,typeof检测的不是a的类型,而是42的类型,也就是a是没有类型的,只有a的值有类型。
JS总共有7种数据类型:Number、String、Boolean、Null、Symbol、Undefined、Object。Object是引用类型,其他的是基本类型。至于数组和函数属于Object的子类型。不过typeof 一个函数的时候 会返回’function’,这是为了彰显函数是一等公民的地位。它要特殊一点。
我们在声明一个变量时,会给变量进行赋值,变量在存储的时候也有区别。**基本类型值存放在栈中,可以直接访问。引用类型值存放在堆内存中。**很关键的一点:JS是不允许直接访问内存的,所以当一个变量的值是Object时,它保存的只是一个指针,指向的是