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将string类型转换int类型
Dec 09 Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
vue项目中使用ueditor的实例讲解
Mar 05 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 jQuery
vue 动态生成拓扑图的示例
Jan 03 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
windows xp下安装pear
2006/12/02 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
javascript基本算法汇总
2016/03/09 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python找出完数的方法
2018/11/12 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
料理师求职信
2014/01/30 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
英语邀请函范文
2015/02/02 职场文书
朋友聚会开场白
2015/06/01 职场文书
预备党员入党感言
2015/08/01 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
基于Python实现将列表数据生成折线图
2022/03/23 Python