[TOC]
## 5.4 基本包装类型
ECMAScript提供了三个基本包装类型:`Boolean、Number、String`。
实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能过调用一些方法来操作这些数据。
引用类型与基本包装类型的区别在于**对象的生存期**:使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中,而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即销毁。这意味着我们**不能在运行时为基本类型值添加属性和方法**。
注意:使用new调用基本包装类型的构造函数,与直接调用同名的转型函数式不一样的。
~~~
var value = "25;
var number = Number(value); //转型函数
alert(typeof number); //"number"
var obj = new Number(value); //构造函数
alert(typeof obj); //"object"
~~~
### 5.4.1 Boolean类型
Boolean类型是与布尔值对应的引用类型。常用于生成布尔值的包装对象的实例。
~~~
var bool = new Boolean(true);
~~~
Boolean类型的实例重写了valueOf()方法,返回的基本类型值true或false,重写了toString()方法,返回字符串“true”和“false”。
要注意一点的是,即使你使用false创建一个Boolean实例对象,当进行逻辑运算时,它会被转为true,因为它是一个对象,而所有对象在逻辑运算中都会返回true。
~~~
var falseObeject = new Boolean(false);
var result = falseObject && true;
alert (result); //true;
~~~
建议:永远不要使用Boolean对象
### 5.4.2 Number类型
Number是与数字值对应的引用类型。
**1.创建Number对象**
~~~
var num = new Number();
var num2 = new Number(10);
~~~
Number类型的toString()方法返回数值的字符串,可传递一个表示基数的参数,默认是10进制。
**2.属性**
| 属性 | 描述 |
| --- | --- |
| MAX_VALUE | 可表示的最大的数。|
| MIN_VALUE | 可表示的最小的数。|
| NaN | 非数字值。|
| NEGATIVE_INFINITY | 负无穷大,溢出时返回该值。|
| POSITIVE_INFINITY | 正无穷大,溢出时返回该值。|
| Number.MAX_SAFE_INTEGER | 表示能够精确表示的最大整数,即9007199254740991。 |
| Number.MIN_SAFE_INTEGER | 表示能够精确表示的最小整数,即-9007199254740991。|
**3.格式化方法**
| 方法 | 描述 |
| --- | --- |
| toFixed() | 按照指定的小数位来返回数值的字符串表示(四舍五入)。|
| toExponential() | 用于将一个数转为科学计数法形式。|
| toPrecision() | 方法可能返回固定大小格式,也可能返回指数格式,具体规则是看哪种格式最合适的。它也接收一个参数,表示数值的所有数字的位数(不包含指数部分)|
### 5.4.3 String类型
String类型是字符串的对象包装类型。
**1.创建String对象**
~~~
var text = new String("Hello world!");
~~~
String构造函数有一个静态方法:
fromCharCode()方法的参数是一系列Unicode码点,返回对应的字符串。
~~~
var str = String.fromCharCode(104, 101, 108, 108 ,111);
console.log(str); // "hello"
~~~
String类型的每个实例都有一个**length属性**,表示字符串中包含多少个字符(从0开始)。
**2.方法**
* 字符方法
| 方法 | 描述 |
| --- | --- |
| chatAt() | 以单字符字符串的形式返回给定位置的字符。 |
| charCodeAt() | 返回给定位置字符的Unicode码点(十进制表示)。|
* 字符串操作方法
| 方法 | 描述 |
| --- | --- |
| concat() | 用于连接两个字符串,参数可以是一个或多个字符串,返回拼接得到的新字符串。 |
| slice(start,end) | 从start位置提取字符串到end位置 - 1,负数则等于加上字符串长度。*end省略默认末尾*|
| substring(start,end) | 从start位置提取字符串到end位置 - 1,负数转成0。 |
| substr(start,count) | 从start位置提取count个字符,返回字符串。start为负加上长度,count为负转成0,返回空串。|
**以上方法均不影响原字符串。**
* 字符串位置方法
| 方法 | 描述 |
| --- | --- |
| indexOf() | 返回给定元素在字符串中**第一次**出现的位置,如果没有出现则返回-1。第一个参数为要查找的子字符串,可以接受第二个参数,表示搜索的开始位置 |
| lastIndexOf() | 返回给定元素在字符串中**最后一次**出现的位置,如果没有出现则返回-1。第一个参数为要查找的子字符串,可以接受第二个参数,表示搜索的开始位置 |
* trim()方法
`trim() `是ECMAScript 5新增的,用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。
~~~
var str = " hello ";
console.log(str.trim()); // "hello"
~~~
* 字符串大小写转换方法
| 方法 | 描述 |
| --- | --- |
| toLowerCase()| 用于将一个字符串全部转为小写,返回一个新字符串,不改变原字符串。|
| toUpperCase() | 将字符串的字符全部转为大写。 |
* 字符串的模式匹配方法
| 方法 | 描述 |
| --- | --- |
| match() | 找到一个或多个正则表达式的匹配,找到返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null。|
| search() | 返回值为匹配的第一个位置。如果没有找到匹配,则返回-1。 |
| replace()| 用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g修饰符的正则表达式)。 |
| split() | 按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。还可传入第二个参数,决定了返回数组的成员数。 |
* localeCompare()方法
`localeCompare()`用于比较两个字符串。它返回一个整数:
~~~
如果小于0,表示字符串小于参数字符串;
如果等于0,表示两者相等;
如果大于0,表示字符串大于参数字符串。
~~~
- 前言
- 第一章 JavaScript简介
- 第三章 基本概念
- 3.1-3.3 语法、关键字和变量
- 3.4 数据类型
- 3.5-3.6 操作符、流控制语句(暂略)
- 3.7函数
- 第四章 变量的值、作用域与内存问题
- 第五章 引用类型
- 5.1 Object类型
- 5.2 Array类型
- 5.3 Date类型
- 5.4 基本包装类型
- 5.5 单体内置对象
- 第六章 面向对象的程序设计
- 6.1 理解对象
- 6.2 创建对象
- 6.3 继承
- 第七章 函数
- 7.1 函数概述
- 7.2 闭包
- 7.3 私有变量
- 第八章 BOM
- 8.1 window对象
- 8.2 location对象
- 8.3 navigator、screen与history对象
- 第九章 DOM
- 9.1 节点层次
- 9.2 DOM操作技术
- 9.3 DOM扩展
- 9.4 DOM2和DOM3
- 第十章 事件
- 10.1 事件流
- 10.2 事件处理程序
- 10.3 事件对象
- 10.4 事件类型
- 第十一章 JSON
- 11.1-11.2 语法与序列化选项
- 第十二章 正则表达式
- 12.1 创建正则表达式
- 12.2-12.3 模式匹配与RegExp对象
- 第十三章 Ajax
- 13.1 XMLHttpRequest对象
- 你不知道的JavaScript
- 一、作用域与闭包
- 1.1 作用域
- 1.2 词法作用域
- 1.3 函数作用域与块作用域
- 1.4 提升
- 1.5 作用域闭包
- 二、this与对象原型
- 2.1 关于this
- 2.2 全面解析this
- 2.3 对象
- 2.4 混合对象“类”
- 2.5 原型
- 2.6 行为委托
- 三、类型与语法
- 3.1 类型
- 3.2 值
- 3.3 原生函数