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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
js 返回时间戳所对应的具体时间
Jul 20 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
javascript中使用new与不使用实例化对象的区别
Jun 22 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
Node.js静态文件服务器改进版
Jan 10 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
angularJs中datatable实现代码
Jun 03 Javascript
JScript实现表格的简单操作
Aug 15 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
JS+HTML5 canvas绘制验证码示例
Dec 05 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
php实现快速排序法函数代码
2012/08/27 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
几种响应式文字详解
2017/05/19 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
Win8下python3.5.1安装教程
2020/07/29 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
普天C++笔试题
2016/03/20 面试题
个人简历自我评价范文
2014/02/04 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
心理学培训心得体会
2016/01/22 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers