JS 基礎知識點總結

參考 《JavaScript 高級程序設計(第3版)》

<script>

1、<script> 標籤加載外部 JS :

    1)defer="defer" :延遲腳本,腳本立即下載,但延遲執行,按順序執行。

    2)async="async" :異步腳本,腳本立即下載,但延遲執行,順序不定。

注:實現 JS 異步的另一個方法是動態創建 <script>


文檔模式

2、文檔模式:混雜模式和標準模式。(主要是影響 CSS,但會對部分 JS 有影響)

    1)混雜模式:令 IE 的行爲與 IE5 相同,以此來解析渲染頁面。

    2)標準模式:讓 IE 的行爲更接近標準行爲。


3、嚴格模式:在腳本頂部添加 "use strict";  用於處理 ECMAScript 3 中一些不確定的行爲,並對某些不安全的操作拋出錯誤。

注:ECMAScript 5 引入的,支持 IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome


基本數據類型

4、5 種基本數據類型:Undefined、Null、Boolean、Number、String

注:另外是 1 種複雜數據類型:Object


5、typeof 操作符:返回:"undefined"、"boolean"、"string"、"number"、"object"(對象或null)、"function"(函數)


6、Undefined 類型:只有一個值,即是 undefined。當使用 var 聲明卻未初始化時,賦值 undefined


7、Null 類型:只有一個值,即是 null。表示空對象指針。typeof 返回 object。

注:null == undefined; // true


8、Boolean 類型:兩個值,即是 true 和 false。

    1)Boolean() 方法:參數是需要轉換的值,轉換爲 Boolean 類型,undefined 只能轉換爲 false


9、Number 類型:最大值 Number.MAX_VALUE ,最小值 Number.MIN_VALUE

    1)Number() 方法:參數是需要轉換的值,true 轉爲 1;false 轉爲 0;null 轉爲 0;undefined 轉爲 NaN;空串轉爲 0;字符串只能包含數字才能轉換;其他轉爲 NaN。

    2)parseInt() 方法:參數是需要轉化的值和基數,與 Number 方法不同的是,只要字符串是以數字或負號開頭的都能轉換;空串轉爲 NaN。

                                         使用時通常會指定基數,如十進制:parseInt("2356" , 10);

    3)parseFloat() 方法:參數是需要轉化的值,轉爲浮點數。

    4)toFixed() 方法:點調用,參數是小數位,四捨五入,並保留指定小數位。

注:0.1 + 0.2 == 0.3; // false


10、NaN:非數值。用 isNaN() 方法判斷能否轉換爲數值。

注:涉及 NaN 的操作都會返回 NaN;NaN 與任何值都不等,包括自身。


String 類型

11、String 類型:

    1)toString() 方法:點調用,無參數,null 和 undefined 沒有 toString 方法,不可調用,否則會出錯。

    2)String() 方法:參數是需要轉化的值,如果有 toString 方法則調用,若沒有則 null 會返回 "null",undefined 會返回 “undefined”

    3)length 屬性:返回字符串包含的字符個數。

    4)charAt() 方法:點調用,參數是下標,返回指定位置的字符。

    5)slice() 方法:點調用,參數是起始位和終止位,返回子串,不包含終止位的字符。終止位可以不指定。參數爲負數時,與長度相加。

    6)substring() 方法:點調用,參數是起始位和終止位,返回子串,不包含終止位的字符。終止位可以不指定。參數爲負數時,變成0。

    7)substr() 方法:點調用,參數是起始位和字串位數,返回子串。終止位可以不指定。參數爲負數時,第一個與長度相加,第二個變成0。

    8)indexOf() 方法:點調用,參數是子串,返回子串的位置。

    9)lastIndexOf() 方法:點調用,參數是子串,從末尾搜索,返回子串的位置。

    10)trim() 方法:點調用,無參數,刪除前後空格符,返回刪除後的字符串,不修改原來的字符串。

    11)toLowerCase() 方法和 toUpperCase() 方法:點調用,無參數,轉換大小寫,返回轉換後的字符串,不修改原來的字符串。

    12)match() 方法:點調用,參數是正則表達式,返回一個數組。格式是:字符串.match(正則式);

    13)exec() 方法:點調用,參數是字符串,返回一個數組。格式是:正則式.exec(字符串);

    14)match VS exec :在全局模式下,match 返回的數組可能有多項,但 exec 返回的數組都只有一項;

                                            在全局模式下,lastIndex 在每次調用 exec 後都會增加,而match 始終爲0。

    15)search() 方法:點調用,參數是正則表達式,返回第一個匹配項的索引。格式是:字符串.search(正則式);

    16)replace() 方法:點調用,參數有兩個,第一個是希望被替換的子串或正則表達式,第二個是替換的子串或函數。

                                         如果第一個是字符串,則只替換第一個匹配的子串;如果是正則表達式,則會替換所有匹配的子串。

                                         如果第二個是函數,則可以按照匹配項的不同對其進行替換。例:

//對 <、>、&、" 進行轉義
function strReplace(str){
    return str.replace(/[<>"&]/g, function(match, pos, originalText){
        switch(match){
            case "<":
                return "<";
            case ">":
                return ">";
            case "\"":
                return "&";
            case "&":
                return """;
        }
    });
}

    17)split() 方法:點調用,參數是分隔符。返回分割的子串組成的數組。

    18)localeCompare() 方法:點調用,參數是另一個字符串。比較兩字符串,若排在參數字符串之前,則返回負數;若倆字符串一樣,返回0;若排在參數後面,返回正數。

    

補充:控制檯輸出、for-in

12、控制檯輸出:console.log() 。格式化:%s:字符串;%d:整型;%f:浮點型


13、for-in 語句:

var person = {
    "name" : "a",
    "age" : 18
};
for(var propoty in person){
    alert(person[propoty]); //"a"  "18"
}
注:for-in 語句中,propoty 是對應對象的屬性名,而非屬性值。也就是如果對象是數組,那麼 propoty 對應數組的下標。

Function 類型

14、Function 類型:函數是對象,函數名是指針

    1)函數聲明語法:函數聲明可以放在調用之後

function funName ( arg1, arg2, ...){
    //function body
}

    2)函數表達式法:函數表達式必須放在調用之前

var funName = function ( arg1, arg2, ...){
    //function body
}; //以分號結尾


    3)沒有重載:因爲函數名相當於一個指針,如果重載,就相當於把指針指向另一個函數對象,也就是覆蓋了原來的函數對象。

    4)函數內部屬性 arguments:

          調用函數時,傳入的函數參數的類型,數量不會受到函數聲明的限制。

          arguments 對象(並非 Array 實例)用於存儲傳入的所有參數。

          arguments.length 表示傳入的參數的個數;而 funName.length 表示函數定義時希望傳入的參數的個數。

          在非嚴格模式中,修改 arguments 的某個值,會與傳入的命名參數保持同步。

function sum (a , b){
    argument[0] = 20;
    return a + b;
}
alert(sum(1,2)); //22   注:若使用 "use strict"; 則依然是3

          arguments.callee:指針,執行函數對象,也就是相當於函數名。(常用於遞歸調用,使得遞歸函數的函數體與函數名無關)


    5)函數內部屬性 this:指針,指向函數當前的執行環境。

          全局作用域中調用函數時,this 對象引用的是 window; 若函數作爲某對象的方法,則 this 指向該對象。

    6)函數內部屬性 caller:保存調用當前函數的函數的引用,也就是調用當前函數的函數名,若全局作用域中調用當前函數,則值爲 null。ECMAScript 5 規範化。

          注:嚴格模式中訪問會出錯。

    7)length 屬性:表示希望接收的參數的個數。

    8)prototype 屬性:用於保存實例方法。

    9)apply() 方法:點調用,參數有兩個,第一個是運行函數的作用域,第二個是參數數組(可選)(可以是 arguments 或其他 Array 實例)

    10)call() 方法:點調用,參數有兩個,第一個是運行函數的作用域,第二個是各個參數的值(可選)

    11)apply 和 call 的作用主要是擴充函數的作用域:這樣的好處是不需要對象與方法之間有任何的耦合關係。

var a = 1;
var b = { a : 2};
function sayA(){
    alert(this.a);
}
sayA(); // 1
sayA.call(window); //1
sayA.call(b); // 2
sayA.apply(b); // 2



單體內置對象 Global 、Math

15、單體內置對象 Global:不屬於任何對象的屬性和方法,都是屬於 Global,如:isNaN()、parseInt()、parseFloat() 等

URI 編碼方法

    1)URI 編碼方法:

          encodeURI() :參數是某個 uri 。不會對特殊字符進行編碼,如冒號、問號等。也就是除了空格被編碼爲 %20 外,其他原封不動。對應的 decodeURI() 用於解碼。

          encodeURIComponent() :參數是某個 uri 。會對所有的特殊字符進行編碼。對應的 decodeURIComponent() 用於解碼。
    2)eval() 方法:參數是 ECMAScript 語句字符串,直接執行該語句,然後將結果插入原來的位置。


16、單體內置對象 Math:

    1)Math.min() 和 Math.max() 方法:可傳入多個數值參數,返回最值。

    2)Math.ceil() 方法:參數是一個數值,向上取整

          Math.floor() 方法:參數是一個數值,向下取整

          Math.round() 方法:參數是一個數值,四捨五入取整

    3)Math.random() 方法:無參數,返回一個隨機數 r,0 <= r < 1


17、垃圾收集機制:大部分採用 標記清除:即是當變量進入環境時標記“進入環境”;當離開時標記“離開環境”,表示準備刪除。垃圾收集器根據標記完成內存清除工作。


Object 類型

18、Object 類型:

    1)調用構造函數創建實例:

var obj = new Object();
obj.name = "a";
obj.age = 18;

    2)使用字面量創建實例:

var obj = {
    name : "a",  //注意逗號;屬性名可以是用引號,也可以不用
    age : 18
}; //注意分號

    3)instanceof 操作符:變量 instanceof 引用類型 :用於判斷是否是某個對象


Array 類型

19、Array 類型:
    1)調用構造函數創建實例:
var a = new Array(); //空數組
var b = new Array(3);  //有3個項
var c = new Array(1,2,3);  //初始化各個項
    2)使用字面量創建實例:
var a = [];  //空數組
var b = [1,2,3]; 
    3)length 屬性:令 length = 0 則可以達到清空數組的目的;給 length 賦值:若比原來大則會擴充數組,新的項值都是 undefined;若比原來小,則會刪除多餘的項。
    4)Array.isArray() 方法:參數是某個數組名,判斷是否是數組。
    5)toString()、toLocaleString()、valueOf() 方法:點調用,無參數,返回數組的各個項組成的字符串,中間以逗號分隔
    6)join() 方法:點調用,參數是分隔符,返回數組的各個項組成的字符串,中間以自定義分隔符分隔。
    7)push() 方法:點調用,參數是希望插入的項(可以多個,中間用逗號分隔)(注:插入數組則會成爲多維數組),尾插入,返回插入後的長度。
          pop() 方法:點調用,無參數,尾刪除,返回刪除的項。
          shift() 方法:點調用,無參數,頭刪除,返回刪除的項。
          unshift() 方法:點調用,參數是希望插入的項(可以多個,中間用逗號分隔)(注:插入數組則會成爲多維數組),頭插入,返回插入後的長度。
    8)reverse() 方法:點調用,無參數,反轉數組,改變原數組
          sort() 方法:點調用,無參數時按照升序排列,也可傳入一個函數(函數返回負數時位置不變;返回0表相等;返回正數時位置調換),改變原數組
    9)concat() 方法:點調用,參數是另一個數組,合併兩個數組,返回合併後的數組,不改變原數組
    10)slice() 方法:點調用,第一個參數是起始位置,第二個參數是終止位置(不包含終止位置的項)(可省略),參數是負數則加上長度,返回子數組,不改變原數組
    11)splice() 方法:點調用,第一個參數是起始位置,第二個參數是刪除的項的個數,第三個參數是插入的項。返回刪除的項組成的數組,改變原數組。可以實現:
                                       刪除(第三項省略);插入(第二項爲 0,返回空數組);替換
    12)indexOf() 方法:點調用,參數是某個項,返回查找的項的索引,使用全等操作符查找。
             lastIndexOf() 方法:點調用,參數是某個項,返回查找的項的索引,使用全等操作符查找,反向查找。
    13)every() 方法:點調用,參數是一個函數,對每一項運行給定函數,若每一項都返回 true,則返回 true。
             filter() 方法:點調用,參數是一個函數,對每一項運行給定函數,若某些項返回true,則返回這些項組成的數組。
             forEach() 方法:點調用,參數是一個函數,對每一項運行給定函數,沒有返回值,相當於執行 for 循環。
             map() 方法:點調用,參數是一個函數,對每一項運行給定函數,返回每一項返回的結果組成的數組。
             some() 方法:點調用,參數是一個函數,對每一項運行給定函數,若存在一項或以上返回 true,則返回 true。 
             注:在函數中操作 item 不會改變原來數組,除非對 array 進行操作。支持的瀏覽器:IE9+、Firefox 2+、Safari 3+、Opera 9.5+、Chrome
var a = [1,2,3,4,5,6,7,8,9];

//看數組是否每一項都大於5。不改變原數組。
var everyResult = a.every(function(item, index, array){
    return (item > 5);
}); //false

//返回大於5的項組成的數組。不改變原數組。
var filterResult = a.filter(function(item, index, array){
    return (item > 5);
}); //6,7,8,9

//將每一項加1組成新的數組。不改變原數組。
var mapResult = a.map(function(item, index, array){
    return item + 1;
}); //2,3,4,5,6,7,8,9,10

//看數組中是否存在大於5的項。不改變原數組。
var someResult = a.some(function(item, index, array){
    return (item > 5);
}); //true

//輸出數組的每一項
a.forEach(function(item, index, array){
    console.log(item);
});


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章