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 相关文章推荐
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
Javascript复制实例详解
Jan 28 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
Jan 16 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
js实现京东轮播图效果
Jun 30 Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 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
paypal即时到账php实现代码
2010/11/28 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
老生常谈js数据类型
2017/08/03 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
表彰先进集体通报
2014/01/12 职场文书
税务会计岗位职责
2014/02/18 职场文书
租房协议书
2014/09/12 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书