9_1:概念:简单数据类型 + 复杂数据类型

知识梳理

简单类型与复杂类型
堆和栈
简单类型的内存分配
复杂类型的内存分配
简单类型传参
复杂类型传参

一 数据类型分类

1)基本概念

//1 简单数据类型:也称 值类型 又称 基本数据类型
string number Boolean undefined null
null 返回的是对象比较特殊
//2 复杂数据类型:也称 引用类型
在存储变量时存储的仅仅是地址(引用),因此叫做引用数据类型
通过new关键字创建的对象(系统对象 自定义对象)如 Object Array Date等

2)两者区别

//基本类型
1. 基本类型变量存放在栈内存里(Stack)
2. 基本类型的值是按值访问的
3. 基本类型的值是不可变的
4. 基本类型的比较是指的比较

//引用类型
1. 引用类型的值 存放在堆内存(Heap)中的对象(Object)里
2. 引用类型的值是按引用访问的
3. 引用类型的值是可变的
4. 引用类型的比较是引用的比较

二 两者的内存分配机制

//1 值类型:存放在栈里面,直接开辟空间存放变量的值

//2 引用类型:首先在栈里面存放索引地址,让后这个地址指向堆里面的数据

三 两者的参数传递

1)简单类型传参

function fun(a){
    a++;
    console.log(a);
}
var x = 10;
fun(x);//输出11
console.log(x);//输出10

简单类型:把自己的值 复制一份给了形参
在函数内部修改形参变量 不影响原来的变量本身

2) 复杂类型传参

function Person(name) {
    this.name = name;
}
function f1(x) { //x = p
    console.log(x.name + '2');//刘德华
    x.name = '张学友';
    console.log(x.name + '3');//输出张学友
}
var p = new Person('刘德华');
console.log(p.name + '1');//输出:刘德华
f1(p);
console.log(p.name + '4');//输出:张学友

把变量在栈空间里的堆地址 复制给了形参
形参和实参起其实保存的是同一个堆地址,操作的是同一个对象
= PHP中的引用传参

f1(p);   x = p ( 他们最后都指向了堆里面的数据 )

堆和栈的概念 

内存空间里面分为两种 栈内存空间 和 堆内存空间
原文地址:https://www.cnblogs.com/fuyunlin/p/14420041.html