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 相关文章推荐
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
VC调用javascript的几种方法(推荐)
Aug 09 Javascript
Vue.js教程之axios与网络传输的学习实践
Apr 29 Javascript
深入koa-bodyparser原理解析
Jan 16 Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 Javascript
小程序实现上下切换位置
Nov 16 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+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
基于vue2.0动态组件及render详解
2018/03/17 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
js实现微信聊天界面
2020/08/09 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
Python线程中对join方法的运用的教程
2015/04/09 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python实现注册登录系统
2017/08/08 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python基于百度云文字识别API
2018/12/13 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
电气自动化大学生求职信
2013/10/16 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
校长寄语大全
2014/04/09 职场文书
通信工程专业求职信
2014/06/04 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
爱国主题班会教案
2015/08/14 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
Django框架之路由用法
2022/06/10 Python