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 相关文章推荐
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
JavaScript返回上一页的三种方法及区别介绍
Jul 04 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
VsCode与Node.js知识点详解
Sep 05 Javascript
a标签调用js的方法总结
Sep 05 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
js实现模拟购物商城案例
May 18 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
vue使用原生swiper代码实例
2020/02/05 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
python下载库的步骤方法
2019/10/12 Python
python文件和文件夹复制函数
2020/02/07 Python
keras的三种模型实现与区别说明
2020/07/03 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
为什么需要版本控制?
2013/08/08 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
追悼会上的答谢词
2014/01/10 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
MySQL数据库简介与基本操作
2022/05/30 MySQL
Redis唯一ID生成器的实现
2022/07/07 Redis