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 相关文章推荐
关于JavaScript的一些看法
May 27 Javascript
基于jquery的可多选的下拉列表框
Jul 20 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
动态加载jquery库的方法
Feb 12 Javascript
使用js画图之画切线
Jan 12 Javascript
javascript实现获取字符串hash值
May 10 Javascript
javascript图片滑动效果实现
Jan 28 Javascript
JavaScript实现url参数转成json形式
Sep 25 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
BootStrap 页签切换失效的解决方法
Aug 17 Javascript
Vue 创建组件的两种方法小结(必看)
Feb 23 Javascript
Iview Table组件中各种组件扩展的使用
Oct 20 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
php输入流php://input使用浅析
2014/09/02 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
浅谈react前后端同构渲染
2017/09/20 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python flask 多对多表查询功能
2017/06/25 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
PyTorch-GPU加速实例
2020/06/23 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
语文课外活动总结
2014/08/27 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
创业计划书之废品回收
2019/09/26 职场文书