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 贪吃蛇实现代码
Nov 22 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
Jun 16 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
Mar 04 Javascript
手机端转盘抽奖代码分享
Sep 10 Javascript
JavaScript中将数组进行合并的基本方法讲解
Mar 07 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
Jul 21 Javascript
使用D3.js制作图表详解
Aug 13 Javascript
JS开发中基本数据类型具体有哪几种
Oct 19 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 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
PHP 万年历实现代码
2012/10/18 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
python提示No module named images的解决方法
2014/09/29 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
Python tkinter label 更新方法
2018/10/11 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python日志器使用方法及原理解析
2020/09/27 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
什么是Remote Module
2016/06/10 面试题
大一新生军训时的自我评价分享
2013/12/05 职场文书
财务工作个人求职的自我评价
2013/12/19 职场文书
实习生求职自荐信
2014/02/07 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
个人年终总结开头
2015/03/06 职场文书
夏洛特的网观后感
2015/06/15 职场文书
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电