JavaScript装箱及拆箱boxing及unBoxing用法解析


Posted in Javascript onJune 15, 2020

首先我们来看看这段代码

var s1 = "abc";
var s2 = s1.indexOf("a")

s1 是个 string 啊,怎么会有 indexOf() 方法呢?

这里就涉及到了 JavaScript 中的装箱与拆箱的概念了

装箱:把基本数据类型转化为对应的引用数据类型的操作

在《javascript高级程序设计》中有这样一句话:

每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。

还是拿最开始的例子

var s1 = "abc";
var s2 = s1.indexOf("a")

变量s1是一个基本类型值,它不是对象,它不应该有方法。但是js内部为我们完成了一系列处理(即装箱),使得它能够调用方法,实现的机制如下:

(1)创建String类型的一个实例;

(2)在实例上调用指定的方法;

(3)销毁这个实例;

下面来看看代码实现:

var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;

这样就完成装箱,我们也就能在s1上调用方法了

拆箱:将引用类型对象转换为对应的值类型对象

拆箱:将引用类型对象转换为对应的值类型对象

它是通过引用类型的valueOf()或者toString()方法来实现的。如果是自定义的对象,你也可以自定义它的valueOf()/tostring()方法,实现对这个对象的拆箱。

var objNum = new Number(123); 
 var objStr =new String("123");  
 console.log( typeof objNum ); //object
 console.log( typeof objStr ); //object 
 console.log( typeof objNum.valueOf() ); //number
 console.log( typeof objStr.valueOf() ); //string
 
 console.log( typeof objNum.toString() ); // string 
 console.log( typeof objStr.toString() ); // string

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript css float属性的特殊写法
Nov 13 Javascript
Javascript 错误处理的几种方法
Jun 13 Javascript
js中将字符串转换成json的三种方式
Jan 12 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 Javascript
js防刷新的倒计时代码 js倒计时代码
Sep 06 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
vue组件化中slot的基本使用方法
May 01 Javascript
通过实例解析JavaScript for in及for of区别
Jun 15 #Javascript
vue proxy 的优势与使用场景实现
Jun 15 #Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 #Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 #Javascript
为react组件库添加typescript类型提示的方法
Jun 15 #Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 #Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 #Javascript
You might like
MySql中正则表达式的使用方法描述
2008/07/30 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
php自动加载代码实例详解
2021/02/26 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python实现超简单端口转发的方法
2015/03/13 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
大二学生学习个人自我评价
2014/01/19 职场文书
年度考核评语
2014/01/19 职场文书
医师定期考核实施方案
2014/05/07 职场文书
校园文明倡议书
2014/05/16 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
保证书格式
2015/01/16 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技