[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 原生函數