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控制iframe滚动的代码
Apr 10 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
在JavaScript中如何解决用execCommand(
Oct 19 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
javascript 跨域问题以及解决办法
Jul 17 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
JS实现手风琴特效
Nov 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
Express使用html模板的详细代码
2017/09/18 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
医学院毕业生自荐信
2013/11/08 职场文书
家长对孩子的感言
2014/03/10 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
简历中自我评价范文
2015/03/11 职场文书
阿凡达观后感
2015/06/10 职场文书
生日祝酒词大全
2015/08/10 职场文书
学前班教学反思
2016/02/24 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫