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 Accessor实现说明
Dec 06 Javascript
基于jQuery的自动完成插件
Feb 03 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
javascript自定义的addClass()方法
May 28 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
May 03 jQuery
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
uniapp引入支付宝原生扫码插件步骤详解
Jul 23 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
深入array multisort排序原理的详解
2013/06/18 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
js 走马灯简单实例
2013/11/21 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
javascript闭包入门示例
2014/04/30 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
在python shell中运行python文件的实现
2019/12/21 Python
Python项目跨域问题解决方案
2020/06/22 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
安全生产投入制度
2014/01/29 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
超市国庆节促销方案
2014/02/20 职场文书
保密承诺书范文
2014/03/27 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
公司口号大全
2014/06/11 职场文书
护理学专业求职信
2014/06/29 职场文书
Python实现8种常用抽样方法
2021/06/27 Python
golang中的struct操作
2021/11/11 Golang