js - 09 JS数据类型的区别

堆栈底层机制

思考:

1.  let a = 1;                    2. let n = {name: "xxx"};
    let b = a;                       let m = n;
    b = 2;                           m = {name: "xxxxxx"};
    console.log(a)                   console.log(n)

浏览器执行代码

步骤

  • 从电脑内存中分配出一块内存,用来执行代码,称:栈内存(stack)
  • 分配一个主线程用来自上而下执行js代码

图解1

在这里插入图片描述

  • 创建变量a,放到当前栈内存变量储存空间中
  • 创建一个值1,并把他储存到当前值储存空间中(简单的基本类型值就是这样直接储存,引用其他复杂的类型就不能直接储存)
  • “=”为赋值的意思,其实就是让变量和值相互关联的过程
    #####上述第一题console.log(a) // => 1

图解2

  • 创建一个变量n,并在栈内存之外创建一个内存,用于储存引用类型值,称为堆内存(heap)=>内存中有一个16进制地址
  • 把对象中的键值对(属性名:属性值)依次储存到堆内存中
  • 将变量和对内存地址关联起来
  • 上述第二题中,m = {name:“xxxxxx”},此时堆内存中就有两个’name‘,又因为属性名不能同名,所以name:'xxx’被name:'xxxxxx’替换
  • 综上,上述第二题中console.log(n) =>name:‘xxxxxx’

总结
  • 基本类型:按值操作(直接操作),所以也叫作值类型
  • 引用类型:操作的是堆内存的地址(按引用地址操作)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值