JavaScript 中的對象分為3種:自定義對象 、內置對象、 瀏覽器對象
前面兩種對象是JS 基礎 內容,屬於 ECMAScript; 第三個瀏覽器對象屬於 JS 獨有的, JS API 講解內置對象就是指 JS 語言自帶的一些對象,這些對象供開發者使用,並提供了一些常用的或是最基本而必要的功能(屬性和方法),內置對象最大的優點就是幫助我們快速開發
JavaScript 提供了多個內置對象:Math、 Date 、Array、String等
1.2 查文檔查找文檔:學習一個內置對象的使用,只要學會其常用成員的使用即可,我們可以通過查文檔學習,可以通過MDN/W3C來查詢。
Mozilla 開發者網絡(MDN)提供了有關開放網絡技術(Open Web)的信息,包括 HTML、CSS 和全球資訊網及 HTML5 應用的 API。
MDN:https://developer.mozilla.org/zh-CN/
1.3 Math對象Math 對象不是構造函數,它具有數學常數和函數的屬性和方法。跟數學相關的運算(求絕對值,取整、最大值等)可以使用 Math 中的成員。
屬性、方法名注意:上面的方法使用時必須帶括號
獲取指定範圍內的隨機整數:
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}1.4 日期對象 Date 對象和 Math 對象不一樣,Date是一個構造函數,所以使用時需要實例化後才能使用其中具體方法和屬性。Date 實例用來處理日期和時間
通過Date實例獲取總毫秒數
1.5 字符串對象基本包裝類型 為了方便操作基本數據類型,JavaScript 還提供了三個特殊的引用類型:String、Number和 Boolean。
基本包裝類型就是把簡單數據類型包裝成為複雜數據類型,這樣基本數據類型就有了屬性和方法。
// 下面代碼有什麼問題?
var str = 'andy';
console.log(str.length); 按道理基本數據類型是沒有屬性和方法的,而對象才有屬性和方法,但上面代碼卻可以執行,這是因為
js 會把基本數據類型包裝為複雜數據類型,其執行過程如下 :
// 1. 生成臨時變量,把簡單類型包裝為複雜數據類型
var temp = new String('andy');
// 2. 賦值給我們聲明的字符變量
str = temp;
// 3. 銷毀臨時變量
temp = null;字符串的不可變 指的是裡面的值不可變,雖然看上去可以改變內容,但其實是地址變了,內存中新開闢了一個內存空間。
當重新給字符串變量賦值的時候,變量之前保存的字符串不會被修改,依然在內存中重新給字符串賦值,會重新在內存中開闢空間,這個特點就是字符串的不可變。由於字符串的不可變,在大量拼接字符串的時候會有效率問題
根據字符返回位置 字符串通過基本包裝類型可以調用部分方法來操作字符串,以下是返回指定字符的位置的方法:
案例:查找字符串"abcoefoxyozzopp"中所有o出現的位置以及次數
先查找第一個o出現的位置
然後 只要indexOf 返回的結果不是 -1 就繼續往後查找
因為indexOf 只能查找到第一個,所以後面的查找,利用第二個參數,當前索引加1,從而繼續查找
根據位置返回字符 字符串通過基本包裝類型可以調用部分方法來操作字符串,以下是根據位置返回指定位置上的字符:
在上述方法中,charCodeAt方法返回的是指定位置上字符對應的ASCII碼,ASCII碼對照表如下:
案例:判斷一個字符串 'abcoefoxyozzopp' 中出現次數最多的字符,並統計其次數
核心算法:利用 charAt() 遍歷這個字符串
把每個字符都存儲給對象, 如果對象沒有該屬性,就為1,如果存在了就 +1
遍歷對象,得到最大值和該字符
注意:在遍歷的過程中,把字符串中的每個字符作為對象的屬性存儲在對象中,對應的屬性值是該字符出現的次數
字符串操作方法 字符串通過基本包裝類型可以調用部分方法來操作字符串,以下是部分操作方法:
replace()方法
replace() 方法用於在字符串中用一些字符替換另一些字符,其使用格式如下:
字符串.replace(被替換的字符串, 要替換為的字符串);split()方法 split()方法用於切分字符串,它可以將字符串切分為數組。在切分完畢之後,返回的是一個新數組。
其使用格式如下:
字符串.split("分割字符")2 - 簡單數據類型和複雜數據類型2.1 簡單數據類型 簡單類型(基本數據類型、值類型):在存儲時變量中存儲的是值本身,包括string ,number,boolean,undefined,null
2.2 複雜數據類型 複雜數據類型(引用類型):在存儲時變量中存儲的僅僅是地址(引用),通過 new 關鍵字創建的對象(系統對象、自定義對象),如 Object、Array、Date等;
2.3 堆棧 1、棧(作業系統):由作業系統自動分配釋放存放函數的參數值、局部變量的值等。其操作方式類似於數據結構中的棧;
簡單數據類型存放到棧裡面
2、堆(作業系統):存儲複雜類型(對象),一般由程式設計師分配釋放,若程式設計師不釋放,由垃圾回收機制回收。
簡單數據類型的存儲方式
值類型變量的數據直接存放在變量(棧空間)中
2.4 簡單類型傳參
函數的形參也可以看做是一個變量,當我們把一個值類型變量作為參數傳給函數的形參時,其實是把變量在棧空間裡的值複製了一份給形參,那麼在方法內部對形參做任何修改,都不會影響到的外部變量。
function fn(a) {
a++;
console.log(a);
}
var x = 10;
fn(x);
console.log(x); 運行結果如下:
2.5 複雜數據類型傳參
函數的形參也可以看做是一個變量,當我們把引用類型變量傳給形參時,其實是把變量在棧空間裡保存的堆地址複製給了形參,形參和實參其實保存的是同一個堆地址,所以操作的是同一個對象。
function Person(name) {
this.name = name;
}
function f1(x) { // x = p
console.log(x.name); // 2. 這個輸出什麼 ?
x.name = "張學友";
console.log(x.name); // 3. 這個輸出什麼 ?
}
var p = new Person("劉德華");
console.log(p.name); // 1. 這個輸出什麼 ?
f1(p);
console.log(p.name); // 4. 這個輸出什麼 ? 運行結果如下: