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 相关文章推荐
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
使用AngularJS创建单页应用的编程指引
Jun 19 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
Apr 05 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
解析微信JS-SDK配置授权,实现分享接口
Dec 09 Javascript
jquery实现的简单轮播图功能【适合新手】
Aug 17 jQuery
小程序实现上下移动切换位置
Sep 23 Javascript
Vue实现手机计算器
Aug 17 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/10/20 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JS实现self的resend
2010/07/22 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
微信小程序云开发之使用云数据库
2019/05/17 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
windows系统下Python环境搭建教程
2017/03/28 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
财务会计专业求职信
2014/06/09 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
2015年实习单位评语
2015/03/25 职场文书
秋收起义观后感
2015/06/11 职场文书
Node.js实现断点续传
2021/06/23 Javascript