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 相关文章推荐
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
jquery select 设置默认选中的示例代码
Feb 07 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
火狐下input焦点无法重复获取问题的解决方法
Jun 16 Javascript
javascript事件冒泡和事件捕获详解
May 26 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
vue2里面ref的具体使用方法
Oct 27 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
jquery+ajax实现异步上传文件显示进度条
Aug 17 jQuery
通过实例解析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版 汉字转码的实现详解
2013/06/09 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javascript cookies操作集合
2010/04/12 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python try 异常处理(史上最全)
2019/03/07 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
Python爬虫开发与项目实战
2020/12/16 Python
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
物理系毕业生自荐信
2013/11/01 职场文书
课外科技活动总结
2014/08/27 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android