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 ( 他们最后都指向了堆里面的数据 )
堆和栈的概念
内存空间里面分为两种 栈内存空间 和 堆内存空间