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 相关文章推荐
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
javascript中的绑定与解绑函数应用示例
Jun 24 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
jquery放大镜效果超漂亮噢
Nov 15 Javascript
你可能不知道的JavaScript的new Function()方法
Apr 17 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
Mar 04 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
Nov 21 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 Javascript
vue-froala-wysiwyg 富文本编辑器功能
Sep 19 Javascript
react 原生实现头像滚动播放的示例
Apr 21 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/12/13 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
javascript 数组排序函数
2009/08/20 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
银行求职推荐信范文
2013/11/30 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
525心理活动总结
2014/07/04 职场文书
2014年班干部工作总结
2014/11/25 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
Elasticsearch 批量操作
2022/04/19 Python
PHP 时间处理类Carbon
2022/05/20 PHP