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 相关文章推荐
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
Javascript selection的兼容性写法介绍
Dec 20 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
jquery实现的3D旋转木马特效代码分享
Aug 25 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
Javascript将数字转化成为货币格式字符串
Jun 22 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
Jan 05 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
JavaScript Window窗口对象属性和使用方法
Jan 19 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
ES6 十大特性简介
Dec 09 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python微信公众号开发简单流程
2018/03/23 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python实现猜拳小游戏
2020/04/05 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
院药学专业个人求职信
2013/09/21 职场文书
高中生学习的自我评价
2013/12/14 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript