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 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
简单的Jquery全选功能
Nov 07 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
javascript实现的上下无缝滚动效果
Sep 19 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
微信小程序后台解密用户数据实例详解
Jun 28 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python创建xml文件示例
2017/03/22 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Python批量启动多线程代码实例
2020/02/18 Python
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
大学生文员专业个人求职信范文
2014/01/05 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
校庆口号
2014/06/20 职场文书
2014年保管员工作总结
2014/11/18 职场文书
博物馆观后感
2015/06/05 职场文书
观后感开头
2015/06/19 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android