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生成随机数的4种自定义函数分享
Feb 28 Javascript
12306验证码破解思路分享
Mar 25 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
Sep 06 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
Vue2几种常见开局方式详解
Sep 09 Javascript
Vue使用mixins实现压缩图片代码
Mar 14 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
关于JavaScript 中 if包含逗号表达式
Nov 27 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 生成饼图 三维饼图
2009/09/28 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php自定义session示例分享
2014/04/22 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
javascript new一个对象的实质
2010/01/07 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python三元运算符实现方法
2013/12/17 Python
Python列表(list)常用操作方法小结
2015/02/02 Python
python实现树形打印目录结构
2018/03/29 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Python如何使用字符打印照片
2020/01/03 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
小学教师学期末自我评价
2013/09/25 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
大专毕业生求职信
2014/07/05 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
居住证明范文
2015/06/17 职场文书
团组织关系介绍信
2019/06/24 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python