深入理解基本包装类型
:点上面关注免费学习前端知识!
为了便于操作基本类型值,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 的实例。要了解有关转型函数的更多信息,请阅读我后续分享的文章。
尽管我们不建议显式地创建基本包装类型的对象,但它们操作基本类型值的能力还是相当重要的。而每个基本包装类型都提供了操作相应值的便捷方法。
完
看前端技术文章,就在Web前端精髓
深入理解基本包装类型相关推荐
- 一分钟理解Java包装类型
转载自 一分钟理解Java包装类型 Java 一直标榜自己是一个纯粹的面向对象语言,自作聪明的为所有的值类型都提供相应的引用类型(不明白这两个概念,看之前的<一分钟理解传值和传引用>)比 ...
- 理解基本包装类型Number,String,Boolean
在前面我们知道了引用类型是什么了,也就能理解包装类型了.包装对象其实也是一种引用类型,之所以要单独提出来只不过是因为它们可以把原始类型的值变成(包装成)对象,这样它们也就获得了各自类型相应的特殊行为了 ...
- JS中数据类型、内置对象、包装类型对象、typeof关系
平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...
- 包装类型与包装类别_包装的重要性
包装类型与包装类别 我记得大约15年前开始学习Java的时候. 我读到了很多有关"包装"和"命名空间"的东西,但我完全不了解. 可悲的是:虽然包装的某些方面几乎 ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(第五章:基本引用类型,原始值包装类型,单例内置对象)
第五章:基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建. 5.1 Date 这里不对Date进行详细深入,仅基于书 ...
- 【Mybatis框架】输入映射-pojo包装类型
下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: [html] view plaincopy <?xml versi ...
- java 包装类型_2.Java基本类型与包装类型
java中的基本类型包含以下几个: byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数的,只不过他 ...
- Java为什么要有基本数据类型和包装类型
作为面向对象语言为代表的Java, 在很多任务场景中经常看到它的身影.那么,Java为什么要有基本数据类型和包装类型? 这个问题看似简单,其实也不好回答.毕竟这个问题不仅你我感觉到困惑,许多大佬也感觉 ...
- 基本类型和包装类型的区别详解
六年前,我从苏州回到洛阳,抱着一幅"海归"的心态,投了不少简历,也"约谈"了不少面试官,但仅有两三个令我感到满意.其中有一位叫老马,至今还活在我的手机通讯录里. ...
最新文章
- 3GPP组织和协议概述
- 一种基于三代PacBio测序数据的补洞方法
- StaggeredGridView 实现分析--首次填充过程(一)
- nginx 网站目录重写
- 2014年第五届蓝桥杯C/C++ A组国赛 —— 第一题:海盗分金币
- 2020年前必须掌握的数据库面试问题~
- python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...
- DIV+CSS_1_样式表的分类
- 浅谈Eclipse GEF
- 阅文集团、微软小冰赋生了100部网文主角,可养成...
- 【转载】关于网页尺寸的设置
- Js-01. 语法、关键保留字、变量
- jquery之提示信息
- ARP欺骗原理 [转]
- Sentence2Vec理解
- CUDA/CUDNN下载安装以及适配pytorch和tensorflow
- oa人员导入模板_别拿OA不当系统,让CIO困惑的几个OA小问题
- Java实现一个简单的两人五子棋游戏(二) 画棋盘
- python数学实验与建模pdf_Python数学实验与建模(4)
- 获取移动光猫(如HS8545M5等设备)pppoe密码明文
热门文章
- 假如 C++ 是一只箭,你会用它来射哪只雕?
- 开源公司 HashiCorp 国内险遭禁,阿里、华为也要做好 B 计划?
- 最后2天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!
- 200 行代码解读国产数据库阿里 OceanBase 的速度源头!| CSDN 博文精选
- 作为程序员,我在电脑上都装过哪些 Chrome 插件?
- 从“谈芯”走向“用芯” RISC-V 未来前景光明?
- 微信手机 WeOS 的可行性到底有多大?
- 独家!币安被盗原因找到了!7074 枚比特币竟是这样丢掉的
- 为什么李彦宏会候选院士?
- @程序员 腾讯云计算机视觉应用干货,不容错过!