Javascript 关于基本类型和引用类型的个人理解


Posted in Javascript onNovember 01, 2019

 1.基础类型

A. 基础类型有5种,Number,String,Boolean,Null,Undefined

B. 基础类型没有堆的概念,堆只针对引用类型。

所有基础类型都是以key-value形式存放在栈中,其中,基础类型的值不可变,除非是重新赋值,

比如:

var a = "1234";
a[0] = "k";//对值本身修改,无效
console.log(a)//1234

a = "k";//重新赋值
console.log(a)//k

 2.引用类型

引用类型,如Array,Object,Function,Date,RegExp等

所有引用类型都是以key-value形式存放在栈中,其中,引用类型的key-value存放的value是指针地址,地址指向所在的堆的某个空间 ,这个空间存放着引用类型数据的值。

注意:

引用数据的值为 “堆值”,设堆值为value1 ,堆值对象内部的的key-value形式的value值为值中值 ,设此堆值为 “value2” ,在当前例子中,value1是可改变的,value2是不可改变的,除非是重新赋值。

比如:

// 堆值,即value1,可改变
var a = {"name":"jack"};
a = [];//重新赋值
console.log(a)// []
 
// 堆值中值,即value2,与基本数据类型一样不可改变
var a = {"name":"jack"};
a.name[0] = "0";
console.log(a)// {"name":"jack"}

3.传值与传址

如下图所示:

3.1 A代码块是传值

A代码块执行,a和b都会在栈区开辟一个空间用来存放值10,并且以key-value形式存放。A代码块是传值

3.2 B代码块是传址

B代码块执行,a1会开辟一个空间用来存放指针地址,然后a1的指针地址会赋值给b1,即b1同样会开辟一个空间用来放指针地址,而a1,b1指针地址指向的都是堆区的"堆值",即value1。

4.比较

4.1 基础类型的比较是值的比较

比如:

var a = 1;
var b = 1;
console.log(a == b);//true

4.2 引用类型的比较是引用的比较

同一个引用比较是可以相等,不同引用的比较不等。

比如:

//不同引用的比较
var p1 = {};
var p2 = {};
console.log(p1 == p2) //false
 
//不同引用的比较
var p3 = {"name":{},"age":30};
var p4 = {"name":{},"age":30};
console.log(p3.name == p4.name);//false(这个是引用比较)
console.log(p3.age == p4.age);//true(这个是值比较)
 
//同引用的比较
var p5 = {};
var p6 = p5;
console.log(p5 == p6)//true

如果引用被赋值别的类型,那么当前引用会被切断和值的指针地址。

如下图:

Javascript 关于基本类型和引用类型的个人理解

当a1重新赋值的时候,a1和 “ 堆值--> {} ” 的联系被替换成新的指针地址,即“ 堆值--> [] ”

好了这篇关于js 基本类型和引用类型的文章就介绍到这,更多请继续往下阅读相关文章。

Javascript 相关文章推荐
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
Jun 08 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
Nov 26 Javascript
详解vue 命名视图
Aug 14 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
原生JS实现拖拽效果
Dec 04 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
Nov 01 #Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 #Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 #Javascript
vue实现点击追加选中样式效果
Nov 01 #Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 #Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 #Javascript
微信js-sdk 录音功能的示例代码
Nov 01 #Javascript
You might like
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
python实现文字版扫雷
2020/04/24 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
开平碉楼导游词
2015/02/06 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
Django+Celery实现定时任务的示例
2021/06/23 Python
浅谈redis整数集为什么不能降级
2021/07/25 Redis
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python