• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
斗罗
博客园    首页    新随笔    联系   管理    订阅  订阅

简单理解的基本数据类型和引用数据类型

基本变量存在 栈中 ,赋值时是把自己拷贝一份放在栈中,两者是没关系的,只是value相同而已。
引用类 存在堆中,栈中存的是他们的内存地址,所以引用数据类型 赋值 时,给的是内存地址,指向相同,都指向同一个堆内存中。

function checkAge(data) {
  if (data === { age: 18 }) {
    console.log('You are an adult!')
  } else if (data == { age: 18 }) {
    console.log('You are still an adult.')
  } else {
    console.log('Hmm.. You don't have an age I guess')
  }
}

checkAge({ age: 18 })`
• A: You are an adult!
• B: You are still an adult.
• C: Hmm.. You don't have an age I guess  //(选C)

在测试相等性时,基本类型通过它们的值(value)进行比较,而对象通过它们的引用(reference)进行比较。JavaScript 检查对象是否具有对内存中相同位置的引用。
题目中我们正在比较的两个对象不是同一个引用:作为参数传递的对象引用的内存位置,与用于判断相等的对象所引用的内存位置并不同。
这也是 { age: 18 } === { age: 18 } 和 { age: 18 } == { age: 18 } 都返回 false 的原因。

参数传递的不同(把实参复制给形参的过程)
  
  首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。
  但是为什么涉及到原始类型与引用类型的值时仍然有区别呢?还不就是因为内存分配时的差别。  
  1.原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。
  2.引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!
  因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

posted @ 2021-02-08 14:52  斗罗  阅读(69)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3