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 测试及效验工具
Apr 18 Javascript
jquery中this的使用说明
Sep 06 Javascript
JavaScript中几种常见排序算法小结
Feb 22 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
jQuery操作checkbox选择(list/table)
Apr 07 Javascript
JS图像无缝滚动脚本非常好用
Feb 10 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
使用js和canvas实现时钟效果
Sep 08 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/01/17 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
JS高级笔记
2011/07/13 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
javascript判断office版本示例
2014/04/11 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
.net工程师笔试题
2012/06/09 面试题
服务员岗位责任制
2014/02/11 职场文书
职位说明书范文
2014/05/07 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
教师求职自荐书
2014/06/14 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
日元符号 ¥
2022/02/17 杂记