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 相关文章推荐
页面调用单个swf文件,嵌套出多个方法。
Nov 21 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
node.js中的fs.ftruncate方法使用说明
Dec 15 Javascript
jquery实现的代替传统checkbox样式插件
Jun 19 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 Javascript
微信小程序 出现47001 data format error原因解决办法
Mar 10 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 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程序效率优化的一些策略小结
2010/07/17 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
layui实现数据分页功能
2019/07/27 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python抓取百度查询结果的方法
2015/07/08 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python操作mysql代码总结
2018/06/01 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
个人自我鉴定范文
2013/10/04 职场文书
运动会口号8字
2014/06/07 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
银行授权委托书范本
2014/10/04 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
个人先进材料范文
2014/12/30 职场文书
2015年宣传工作总结
2015/04/08 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android