## 基本包裝類型(Boolean、Number、String)
**1、基本包裝類型簡介**
ECMAScript提供了三個基本包裝類型:`Boolean`、`Number`、`String`。
實際上,每當讀取一個基本類型值的時候,后臺就會創建一個對應的基本包裝類型的對象,從而讓我們能過調用一些方法來操作這些數據。執行步驟如下:
- 創建S提讓那個類型的一個實例
- 在實例上調用指定的方法
- 銷毀這個實例
```
var s1 = new String('test');
var s2 = s1.substring(2);
s1 = null;
```
上面三個步驟也分別適用于Boolean和Number類型對應的布爾值和數字值。
引用類型與基本包裝類型的區別在于對象的生存期:使用new操作符創建的引用類型的實例,在執行流離開當前作用域之前都一直保存在內存中,而自動創建的基本包裝類型的對象,則只存在于一行代碼的執行瞬間,然后立即銷毀,這也是我們不能再運行時為基本類型值添加屬性和方法的原因。
```
var s = 'tg';
s.age =10;
console.log(s.age); // undefined
```
上面代碼執行輸出的是undefined,這是音樂第二行創建的String對象在執行第三行代碼時已經被銷毀了,第三行又創建自己的String對象,而該對象沒有age屬性。
當然,我們也可以將Boolean、Number和String類型當做工具方法,將任何類型轉為布爾值、數值和字符串。
**2、 Boolean類型**
Boolean類型是與布爾值對應的引用類型。常用于生成布爾值的包裝對象的實例。
```
var bool = new Boolean(true);
```
Boolean類型的實例重寫了valueOf()方法,返回的基本類型值true或false,重寫了toString()方法,返回字符串“true”和“false”。
要注意一點的是,即使你使用false創建一個Boolean實例對象,當進行邏輯運算時,它會被轉為true,因為它是一個對象,而所有對象在邏輯運算中都會返回true。
```
var bool = new Boolean(false);
if(bool){
console.log(true);
}
// true
```
對于Boolean類型,我們幾乎不用用它來創建實例對象。
**3、 Number類型**
Number是與數字值對應的引用類型。
創建Number對象:
```
var num = new Number();
var num2 = new Number(10);
```
Number類型的toString()方法返回數值的字符串,可傳遞一個表示基數的參數,默認是10進制。
```
var num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
```
**3.1 屬性**
Number類型有以下屬性:
```
Number.POSITIVE_INFINITY:正的無限,指向Infinity。
Number.NEGATIVE_INFINITY:負的無限,指向-Infinity。
Number.NaN:表示非數值,指向NaN。
Number.MAX_VALUE:表示最大的正數,相應的,最小的負數為-Number.MAX_VALUE。
Number.MIN_VALUE:表示最小的正數(即最接近0的正數,在64位浮點數體系中為5e-324),相應的,最接近0的負數為-Number.MIN_VALUE。
Number.MAX_SAFE_INTEGER:表示能夠精確表示的最大整數,即9007199254740991。
Number.MIN_SAFE_INTEGER:表示能夠精確表示的最小整數,即-9007199254740991。
```
**3.2 格式化方法**
**(1)Number.prototype.toFixed()**
toFixed()方法會按照指定的小數位來返回數值的字符串表示(四舍五入)。
```
var num = 10.005;
console.log(num.toFixed(2)); // "10.01"
```
注意:如果沒有小數位,則以0填補。
```
var num = 10;
console.log(num.toFixed(2)); // "10.00"
```
注意:toFixed()參數的有效范圍為0~20個小數位的數值。
**(2)Number.prototype.toExponential()**
toExponential()方法用于將一個數轉為科學計數法形式。
```
var num = 10;
console.log(num.toExponential()); //1e+1
```
toExponential()方法的頁可以接受一個參數,參數表示小數點后有效數字的位數,范圍為0到20,超出這個范圍
```
var num = 1234;
console.log(num.toExponential(2)); // 1.23e+3
console.log(num.toExponential(1)); // 1.2e+3
```
**(3)Number.prototype.toPrecision()**
toPrecision()方法可能返回固定大小格式,也可能返回指數格式,具體規則是看哪種格式最合適的。它也接收一個參數,表示數值的所有數字的位數(不包含指數部分)
```
var num = 99;
console.log(num.toPrecision(1)); // 1e+2
console.log(num.toPrecision(3)); // 99.0
```
**4、 String類型**
String類型是字符串的對象包裝類型。
創建String對象
```
var text = new String('tg');
```
String構造函數有一個靜態方法:
**(1)String.fromCharCode()**
fromCharCode()方法的參數是一系列Unicode碼點,返回對應的字符串。
```
var str = String.fromCharCode(104, 101, 108, 108 ,111);
console.log(str); // "hello"
```
**4.1 String實例對象的屬性和方法**
**4.1.1 屬性**
**length屬性**
String類型的每個實例都有一個length屬性,表示字符串中包含多少個字符(從0開始)。
**4.1.2 方法**
String類型提供了很多方法:
**(1)字符方法**
`chatAt()`接收一個基于0的字符位置的參數, 返回指定位置的字符
```
var str = 'hello world';
console.log(str.charAt(1)); // e
```
`charCodeAt()`接收一個基于0的字符位置的參數,返回給定位置字符的Unicode碼點(十進制表示)
```
var str = 'hello world';
console.log(str.charCodeAt(1)); // 101
```
String對象實例是一個類數組對象,所以我們可以使用方括號表示法訪問特定字符。
```
var str = 'hello world';
console.log(str[1]); // e
```
**(2)字符串操作方法**
`concat()`用于連接兩個字符串,參數可以是一個或多個字符串,返回拼接得到的新字符串
```
var str1 = 'hello';
var str2 = str1.concat(' world');
console.log(str2); // "hello world"
console.log(str1); // "hello"
```
`slice(start,end) `用于從原字符串取出子字符串并返回子字符串,不改變原字符串。
第一個參數:表示子字符串的開始位置,如果參數是負值,表示從結尾開始倒數計算的位置,即該負值加上字符串長度
第二個參數:可選,表示子字符串的結束位置(不含該位置);如果參數是負值,表示從結尾開始倒數計算的位置,即該負值加上字符串長度;如果不設置,表示將字符串的長度作為結束位置
```
var str = 'hello world';
console.log(str.slice(1,3)); // "el"
console.log(str.slice(1)); // "ello world"
console.log(str.slice(-1)); // "d"
console.log(str); // "hello world"
```
注意:如果第一個參數大于第二個參數,則返回空字符串
`substring()` 用于從原字符串取出子字符串并返回,不改變原字符串,也接收一個或兩個參數。
第一個參數表示子字符串的開始位置;
第二個位置表示結束位置,如果不設置,表示將字符串的長度作為結束位置
注意:substring()方法有些不一樣,當傳入負數時,它會自動將負數轉為0,;當第一個參數大于第二個參數時,它會將兩個參數的位置對換。
```
var str = 'hello world';
console.log(str.substring(-1,2)); // "he"
console.log(str.substring(3,1)); // "el"
```
從上面運行結果我們可以看到,substring()自動將-1轉為0;將第二行的3和1交換了。
`substr()`用于從原字符串取出子字符串并返回,不改變原字符串。
第一個參數:表示子字符串的開始位置;
第二個參數:表示子字符串的長度。如果第一個參數是負數,表示倒數計算的字符位置。如果第二個參數是負數,將被自動轉為0,因此會返回空字符串;如果不設置,表示將字符串的長度作為結束位置
```
var str = 'hello world';
console.log(str.substr(1,2)); // "el"
console.log(str.substr(-1,2)); // "d"
console.log(str.substr(1,-1)); // ""
```
**(3)字符串位置方法**
`indexOf()`返回給定元素在字符串中第一次出現的位置,如果沒有出現則返回-1。第一個參數為要查找的子字符串,可以接受第二個參數,表示搜索的開始位置
```
var str = 'hello world';
console.log(str.indexOf('o')); // 4
console.log(str.indexOf('h',2)); // -1
```
`lastIndexOf()`返回給定元素在字符串中最后一次出現的位置,如果沒有出現則返回-1。第一個參數為要查找的子字符串,可以接受第二個參數,表示搜索的開始位置
```
var str = 'hello world';
console.log(str.lastIndexOf('o')); // 4
console.log(str.lastIndexOf('h',2)); // 0
```
**(4)trim()**
`trim()` 是ECMAScript 5新增的,用于去除字符串兩端的空格,返回一個新字符串,不改變原字符串。
```
var str = ' hello';
console.log(str.trim()); // "hello"
```
**(5)字符串大小寫轉換**
`toLowerCase()`用于將一個字符串全部轉為小寫,返回一個新字符串,不改變原字符串。
`toUpperCase()`將字符串的字符全部轉為大寫
```
var str = 'hello';
var upper = str.toUpperCase();
var lower = upper.toLowerCase();
console.log(upper); // "HELLO"
console.log(lower); // "hello"
```
**(6)字符串的模式匹配方法**
`match()`用于確定原字符串是否匹配某個子字符串,返回一個數組,成員為匹配的第一個字符串。如果沒有找到匹配,則返回null。
`search()`返回值為匹配的第一個位置。如果沒有找到匹配,則返回-1。
`replace()`用于替換匹配的子字符串,一般情況下只替換第一個匹配(除非使用帶有g修飾符的正則表達式)。
`split()`按照給定規則分割字符串,返回一個由分割出來的子字符串組成的數組。還可傳入第二個參數,決定了返回數組的成員數。
**(7)localeCompare()方法**
`localeCompare(s2)`用于比較兩個字符串。它返回一個整數:
如果小于0,表示第一個字符串小于第二個字符串;
如果等于0,表示兩者相等;
如果大于0,表示第一個字符串大于第二個字符串。
```
console.log('a'.localeCompare('a')); // 0
console.log('a'.localeCompare('b')); // -1
```
注意:比較的是字符串在字母表中的順序。
- 前言
- JavaScript簡介
- 基本概念
- 語法
- 數據類型
- 運算符
- 表達式
- 語句
- 對象
- 數組
- 函數
- 引用類型(對象)
- Object對象
- Array對象
- Date對象
- RegExp對象
- 基本包裝類型(Boolean、Number、String)
- 單體內置對象(Global、Math)
- console對象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應用
- 客戶端存儲(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測設備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向對象的程序設計
- 概述
- this關鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯誤處理機制
- JavaScript開發技巧合集
- 編程風格
- 垃圾回收機制