码迷,mamicode.com
首页 > 其他好文 > 详细

4_2:简单数据类型 和 复杂数据类型

时间:2021-02-22 11:45:01      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:通过   杂类   fine   机制   实参   pre   输出   object   mamicode   

知识梳理

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

一 数据类型分类

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 ( 他们最后都指向了堆里面的数据 )

技术图片

堆和栈的概念 

内存空间里面分为两种 栈内存空间 和 堆内存空间

 

4_2:简单数据类型 和 复杂数据类型

标签:通过   杂类   fine   机制   实参   pre   输出   object   mamicode   

原文地址:https://www.cnblogs.com/fuyunlin/p/14419990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!