IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js中引用类型与原始类型的区别 -> 正文阅读

[JavaScript知识库]js中引用类型与原始类型的区别

原始类型

栈内存存储的值空间大小固定,不会改变。
原始值存放在栈空间里,所以原始值具有“不变性”。

var str = 'xx'
str+='6'
console.log(str) //xx6

这里之所以会改变是因为在栈中定义了一块新的空间存储xx6,然后将变量str指向这块空间,并不违背“不变性”。

image.png

复制

var name = 'ConardLi';
var name2 = name;
name2 = 'code秘密花园';
console.log(name); // ConardLi;

在这里插入图片描述

引用类型

引用类型是在栈中存一个地址,这个地址指向堆的某一块区域,这块区域存放着变量的值。
在这里插入图片描述

复制

var obj = {name:'ConardLi'};
var obj2 = obj;
obj2.name = 'code秘密花园';
console.log(obj.name); // code秘密花园

在这里插入图片描述

比较

在这里插入图片描述

var name = 'ConardLi';
var name2 = 'ConardLi';
console.log(name === name2); // true
var obj = {name:'ConardLi'};
var obj2 = {name:'ConardLi'};
console.log(obj === obj2); // false,对于引用类型,比较时会比较它们的引用地址

  • 从这个图中可以看出,obj和obj2虽然对象的样子长得一样,但是在栈和堆中的地址不一样,obj和obj2作为两个对象,在栈中就分别有两个地址,指向堆里两个不同的位置。
  • 只要是一个变量,不管值跟别人一不一样,都需要在栈中有一个独立的空间。

函数参数的值传递

ECMAScript中所有的函数的参数都是按值传递的。

  let obj = {};

  function changeValue(obj) {
    obj.name = 'ConardLi';
    console.log(obj)
    obj = {
      name: 'code秘密花园'  //我理解是在栈里面存了新的个内存地址,跟前面的obj不一样
    };
    console.log(obj)
  }
  changeValue(obj);
  console.log(obj.name); 

输出结果:
在这里插入图片描述
在函数的参数中,复制了一个对象的副本,也就是复制了一个栈里面存的地址是一样的变量,然后它和原先的obj指向堆里面同一个位置,所以在函数changeValue中改变obj.name相当于改变了堆里面的那个地址的东西。所以最后一行的obj.name才会改变。

引用

标题:【JS 进阶】你真的掌握变量和类型了吗 - 掘金

网址:https://juejin.cn/post/6844903854882947080

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:20:07  更:2022-02-28 15:23:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:04:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码