浅谈javascript中基本包装类型


Posted in Javascript onJune 03, 2015

为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean、Number和String。这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。如下例子:

var s1="some text";

var s2=s1.substring(2);

这个例子中的变量s1包含一个字符串,字符串当然是基本类型值,而下一行代码调用了s1的substring()方法,并将返回的结果保存在了s2中。我们知道,基本类型值不是对象,因而从逻辑上讲它们不应该有方法(尽管如我们所愿,它们确实有方法)。其实,为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是呀从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理。
1.创建String类型的一个实例;
2.在实例上调用指定的方法;
3.销毁这个实例。

可以将以上三个步骤想象成是执行了下列ECMAScript代码。

var s1=new String("some text");

var s2=s1.substring(2);

s1=null;

经过此番处理,基本的字符串值就变得跟对象一样了,而且,上面这三个步骤也分别适用于Boolean和Number类型对应的布尔值和数字值。

引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能再运行时为基本类型值添加属性和方法。如下面例子:

var s1="some text"

s1.color="red";

alert(s1.color);//undefined

在此,第二行代码试图为字符串s1添加一个color属性。但是,当第三行代码在此访问s1时,其color属性不见了。问题的原因就是第二行创建的String对象在执行第三行代码时已经被销毁了。第三行代码又创建自己的String对象,而该对象没有color属性。

当然,可以显示的滴调用Boolean、Number和String来创建基本包装类型的对象。不过,应该在绝对必要的情况下再这样做,因为这种做法很容易让人分不清自己是在处理基本包装类型还是引用基本包装类型的值。对基本包装类型的实例调用typeof会返回“object”,而且所有基本包装类型的对象都会被转换为布尔值true。

Object构造函数也会像工厂方法一样,根据传入值得类型返回相应基本包装类型的实例。例如:

var obj=new Object("some text");

alert(obj instanceof String);//true

把字符串传给Object构造函数,就会创建String的实例;而传入数值参数会得到Number的实例,传入布尔值参数就会得到Boolean的实例。

要注意的是,使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。例如:

var value="25";

var number=Number(value); //转型函数

alert(typeof number); //"number"

var obj=new Number(value); //构造函数

alert(typeof obj); //"object"

在这个例子中,变量number中保存的是基本类型的值25,而变量obj中保存的是Number的实例。

尽管我们不建议显式的创建基本包装类型的对象,但它们操作基本类型值的能力还是相当重要的。而每个基本包装类型都提供了操作相应值的便捷方法。

意思所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
父节点获取子节点的字符串示例代码
Feb 26 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 Javascript
jsTree使用记录实例
Dec 01 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
Mar 03 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
使用zrender.js绘制体温单效果
Oct 31 Javascript
VUE+elementui面包屑实现动态路由详解
Nov 04 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 Javascript
JavaScript Tab菜单实现过程解析
May 13 Javascript
js中函数声明与函数表达式
Jun 03 #Javascript
JavaScript基本语法讲解
Jun 03 #Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 #Javascript
ECMAScript中函数function类型
Jun 03 #Javascript
JavaScript运算符小结
Jun 03 #Javascript
浅谈JavaScript字符串与数组
Jun 03 #Javascript
详谈javascript中的cookie
Jun 03 #Javascript
You might like
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
axios学习教程全攻略
2017/03/26 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
python合并多个excel文件的示例
2020/09/23 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
super关键字的用法
2012/04/10 面试题
《九色鹿》教学反思
2014/02/27 职场文书
教师对学生的寄语
2014/04/03 职场文书
高考寄语大全
2014/04/08 职场文书
联片教研活动总结
2014/07/01 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js