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 function定义函数使用心得
Apr 15 Javascript
Jquery实现简单的动画效果代码
Mar 18 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
使用Node.js为其他程序编写扩展的基本方法
Jun 23 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
解决vue里碰到 $refs 的问题的方法
Jul 13 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
原生JS实现网页手机音乐播放器 歌词同步播放的示例
Feb 02 Javascript
vue中data改变后让视图同步更新的方法
Mar 29 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
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
python代码实现ID3决策树算法
2017/12/20 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
python读取中文txt文本的方法
2018/04/12 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
pycharm 安装JPype的教程
2019/08/08 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
文史专业毕业生自荐信
2013/11/17 职场文书
交通事故调解协议书
2014/04/16 职场文书
先进员工事迹材料
2014/12/20 职场文书
欢迎词怎么写
2015/01/23 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫