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中的noscript元素属性位置及作用介绍
Apr 11 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
Dec 19 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
Sep 22 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
深入剖析JavaScript面向对象编程
Jul 12 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
Mar 20 Javascript
vue-test-utils初使用详解
May 23 Javascript
超轻量级的js时间库miment使用解析
Aug 02 Javascript
Js图片点击切换轮播实现代码
Jul 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+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python自定义线程池实现方法分析
2018/02/07 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
金融管理应届生求职信
2014/02/20 职场文书
罚款通知怎么写
2015/04/22 职场文书
毕业典礼致辞
2015/07/29 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis