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 基础问答三
Dec 03 Javascript
jQuery 连续列表实现代码
Dec 21 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
使用jquery插件qrcode生成二维码
Oct 22 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
Jun 15 Javascript
Vue.js组件tree实现无限级树形菜单
Dec 02 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
Oct 16 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(3)
2006/10/09 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python新手学习使用库
2020/06/11 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python文件编写好后如何实践
2020/07/07 Python
python如何实现图片压缩
2020/09/11 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
体育教学随笔感言
2014/02/24 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
中标通知书格式
2015/04/17 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
学术会议领导致辞
2015/07/29 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
redis 查看所有的key方式
2021/05/07 Redis