我的js读书笔记——基本类型vs引用类型

时间:2021-07-19 15:45:35

基本类型值——栈内存   完全保存在内存中的一个位置  按顺序访问

引用类型值——堆内存   变量中保存的实际上是一个指针    无需按顺序访问

5中基本数据类型:Undefined、null、boolean、number和string 栈中,按值访问,因而我们操作的是它们实际保存的值

引用类型值的大小不固定,但内存地址的大小是固定的,因而将内存地址保存在栈中,实际值在堆中。按引用访问。


1.  动态属性  引用类型可以动态添加属性,基本类型不行
二者差异:

2.  复制变量   复制的都是栈中的,

基本类型——副本,互不影响

引用类型——在栈中复制新值,保存内存地址

3.  传递参数——js中函数只有按值传参,对父本没有影响,针对引用类型,也是按值传参,只不过传的是栈中的值(保存内存地址),由于obj、person所指的地址是相同的,所以对obj的操作,就会改变实际堆中的值。

function setName(obj){
    obj.name = "Nichlas";
    obj = new  Object();
    obj.name = "Greg";
}

var person = new Pbject();
setName(person);
alert(person.name);  //"Nichloas"

我的js读书笔记——基本类型vs引用类型

 note:阴影部分指的是

   obj = new  Object();
    obj.name = "Greg";

 

4.检测类型——typeof() , instanceof

 1 var s = "Nicholas";
 2 var b = true;
 3 var i = 22;
 4 var u;
 5 var n = null;
 6 var o = new Object();
 7 
 8 alert(typeof s);  //string
 9 alert(typeof i);   //number
10 alert(typeof b);  //boolean
11 alert(typeof u);  //undefined
12 alert(typeof n);  //object
13 alert(typeof o);  //object

根据规定,所有引用类型的值都是Object的实例,所以检测引用类型值和Object构造函数是,instanceof始终返回true。