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 相关文章推荐
锋利的jQuery 第三章章节总结的例子
Mar 23 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
javascript 构造函数强制调用经验总结
Dec 02 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
Jun 19 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
vue-cli脚手架引入图片的几种方法总结
Mar 13 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
javascript如何实现create方法
Nov 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
如何正确理解PHP的错误信息
2006/10/09 PHP
用PHP发电子邮件
2006/10/09 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php格式化日期实例分析
2014/11/12 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
营销团队口号
2014/06/06 职场文书
求职教师自荐书
2014/06/19 职场文书
校庆标语集锦
2014/06/25 职场文书
承诺函范文
2015/01/21 职场文书
母亲节寄语大全
2015/02/27 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书