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 实现图片直接下载示例代码
Jul 22 Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
Sep 17 Javascript
使用jquery获取url及url参数的简单实例
Jun 14 Javascript
Javascript字符串常用方法详解
Jul 21 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
js+html5生成自动排列对话框实例
Oct 09 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 Javascript
微信小程序-API接口安全详解
Jul 16 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 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结合curl实现多线程抓取
2015/07/09 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
js实现随机抽奖
2020/03/19 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Python3并发写文件与Python对比
2019/11/20 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
装修致歉信
2014/01/15 职场文书
敬老模范事迹
2014/05/21 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
2014年实习生工作总结
2014/11/27 职场文书
职工食堂管理制度
2015/08/06 职场文书
高中信息技术教学反思
2016/02/16 职场文书
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL
MySQL主从切换的超详细步骤
2022/06/28 MySQL
delete in子查询不走索引问题分析
2022/07/07 MySQL