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中数组的排序、乱序和搜索实现代码
Nov 30 Javascript
使用js的replace()方法查找字符示例代码
Oct 28 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
js中数组的常用方法小结
Dec 30 Javascript
Angularjs中使用layDate日期控件示例
Jan 11 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
小程序自定义日历效果
Dec 29 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
JavaScript中的类继承
2010/11/25 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python获取文件扩展名的方法
2015/07/06 Python
对Python中的@classmethod用法详解
2018/04/21 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
应届生高等护理求职信
2013/10/12 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
户外拓展活动方案
2014/02/11 职场文书
学期评语大全
2014/04/30 职场文书
企业员工集体活动方案
2014/08/17 职场文书
个人收入证明模板
2014/09/18 职场文书
药店采购员岗位职责
2014/09/30 职场文书
接待员岗位职责范本
2015/04/15 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫