1. 程式人生 > >《JavaScript權威指南》學習筆記

《JavaScript權威指南》學習筆記

一、javascript資料型別和變數

    javascript中相同的變數可以儲存不同型別的資料,它是鬆散型別或動態型別,上下文環境將決定變數的資料型別。

1    標識變數

    變數命名限制:ECMAScript關鍵字和瀏覽器物件模型(BOM)中的內建關鍵字不可以被用作變數名。

2    基本型別

    Javascript有3種基本資料型別:字串,數字以及布林型;此外,Javascript提供了一些內建物件:String,Number和Boolean。基本資料型別是基本值的型別,而內建物件擁有內建屬性和方法,內建物件會封裝各自的基本型別並呼叫內建屬性和方法。

String資料型別

    Javascript是鬆散型別的語言,字串變數或者數字型別、布林型便來能在宣告時沒有差別;字串變數宣告時把文字賦給String型變數,並且對便來能進行初始化之後才定義了變數的上下文。

    字串文字是由單引號或雙引號所引用的一系列字元;使用單雙引號引用並未規定,只需要前後配對即可;若字串中需要包含單引號或者雙引號,在使用另一種引號進行引用即可,或者使用轉義。

字串轉義

    字串中除可以放入普通字元外,換可以放入轉義字元。轉義符是通過特定方式將一些特殊字元放在字串中的模式;除此之外,還可把Unicode字元放在字串中。

    \n      \\      \”      \u7231

字串編碼

    EncodeURI和encodeURIComponent方法可以將字串從ASCII碼或非ASCII碼字元轉換為URIencoding的字元;這兩個函式也都有對應的解碼方法decodeURI和decodeURIComponet。

字串轉換

    數字、布林值等其他資料型別都可以轉換為字串,指令碼引擎會根據上下文自動完成轉換。

Boolean資料型別

    布林值可以顯式(使用Boolean函式將其他資料型別的值轉換為布林值)地賦給不同型別的變數;雙重否定操作符可以用來顯式地將陣列或字串轉換為布林值:

 varsomeValue = 0;

       varsomeBool = Boolean(someValue);

       varstrValue = “1”;

       varnumValue = 90;

var boolValue =!!strValue;

boolValue =!!numValue;

    toBoolean轉換表請關注,其他型別轉換為布林值的轉換規則。

Number資料型別

        Javascript中,Number資料型別時浮點數,可以包含小數部分,也可以沒有小數部分;若沒有小數部分,則將被當做十進位制整數;若包含小數部分,可以使用指數形式表示。

        兩個特殊的數字:正無窮大(Infinity)和負無窮大(-Infinity);數字型別上溢返回正無窮大,下溢返回負無窮大。

        除十進位制外,換可以使用八進位制和十六進位制來表示數字;如果使用String函式將八進位制或十六進位制數字轉換為字串,則指令碼引擎首先會將數字轉換為十進位制,然後再將結果轉換為字串。

         兩個函式:parseInt(); 無論字串是一個整數,還是浮點數,只返回數字的整數部分;從字串中識別數字部分,直到遇到第一個非數字為止,如:”1.23e-2”,解析的結果是:1; 如果第一個字母不是數字,則直接返回NaN;此外,此函式第二個引數是要轉換的數制,所以使用此函式可以實現數字各個數制之間的轉換。

                       parseFloat(); 從字串第一個數字開始識別數字部分,直到遇到第一個非數字為止,返回十進位制表示的浮點型數值;如果第一個字母不是數字,則直接返回NaN

         除將字串轉換為Number外,Number函式也可以用來將其他資料型別轉換為數字,包含浮點型的字串將返回浮點數,包含整數的字串將返回整數。還可以使用IsFinite函式判斷變數的數值是否是無窮大,若是無窮大或者NaN,返回false,否則返回true。

       具體轉換關係見轉換表。

null和undefiled

        null變數是已定義的、值為null的變數:var nullString = null;

        如果便來能已經宣告但是沒有初始化,那麼就是undefined變數: var updefString;

        如果聲明瞭變數且賦予了初始值,則該變數就不是null或者undefined:var sValue = “”;

        可以使用條件語句判斷變數值。

        可以使用isNaN()函式判斷一個變數是否是NaN;

總結:0,null,NaN以及空字串都是false,其他都是true.

常量

        常量是已命名數值,但不是變數;不可以重新賦值,宣告時就必須完成初始化,一般宣告為全域性變數,名稱為全大寫。

const CURRENT_MONTH = 3.5;

二、操作符和語句

賦值語句

        var a,b=2;//  b 是undefined

算術操作符

二元操作符

        + - * / %   所有的二元操作符都可以用於字串,但是字串必須可以正確轉換為數字;在進行計算前會先將字串轉換為數字

        如果運用於字串:加法符號對字串執行連線操作;如果將字串和數字進行加法操作,也是執行連線操作。

一元操作符

++ --  -(負數)  

自操作符

位操作符

        位操作符將運算元當做32位的二進位制數,然後按位操作:&   |      ^     ~

條件分支語句和程式流

    If else

    Switch

條件操作符

相等/相同操作符

        ==:比較變數值是否相等;會自動轉換變數的資料型別為數字,然後再做比較。Switch語句中隱式地使用了此操作符用於判斷“相等”。對應的:!=

        ===:用來判斷變數的數值和型別,它只有在運算元的數值相同切型別相同的情況下才返回true。對應的:!==

關係操作符號

唯一的三元操作符

邏輯操作符

物件屬性操作符

    .

高階語句

迴圈

    While/dowhile/for

三、javascript物件

    Javascript基本物件:第一種:與資料型別平行的封裝物件;

                                   第二種:Math、Date、RegExp

                                   第三種:Array

基本資料型別物件

new關鍵字

        對於基本型別,在建立時若不使用new關鍵字,則只是建立基本型別;如果使用了new關鍵字,則建立了封裝物件例項。

Var strName =“majq”;      //建立基本型別

        Var strName2 =String(“majq”); //建立基本型別

        Var strName3 =new String(“majq”);//建立封裝物件型別

        建立基本型別後也可以直接使用封裝物件的屬性和方法,其實質是引擎會自動建立一個臨時物件以供使用,在使用完畢之後會自動銷燬此臨時物件。

Boolean物件

        Boolean物件沒有自己的屬性,只有繼承自Object的屬性;Boolean物件例項有不同的方法,取決於初始值是false還是true,如果未對Boolean物件進行初始化,則預設初始值為false;

        可以使用預設初始化、0/1、true/false,””/非空字串對boolean物件進行初始化,值同資料型別轉換規則。

       Boolean物件只有兩個繼承方法:toString(),valueOf();

Number物件

Number靜態屬性:

       MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY

       正負無窮大用來判斷溢位;而最大最小可表示數可用來獲取可表示最大最小值。

Number例項方法

       ToExponential  以字串形式返回數值的指數格式

       ToFixed         以字串形式返回數值的固定位數格式

       toPrecision    以字串形式返回數值的特定精確格式

       valueOf/toStringtoString方法可以傳入數制引數,進行數制轉換後輸出

       toLocaleString返回與環境相關的數值格式

String物件

    屬性:

        length

    方法:

        valueOf

        charAt

        charCodeAt

        concat    連線字串

        split        分割字串

        slice        返回字串的某個片段

        substring,substr    返回子字串

        match,replace,search         正則表示式匹配,替換和查詢

        toLowercase,toUpperCase  大小寫轉換

正則表示式和RegExp

 var searchPattern = new RegExp(‘s+’); //顯式建立正則表示式

 var searchPattern = /s+/;    //文字量方式建立正則表示式

RegExp

        例項方法

        Test 測試正則表示式與文字是否匹配

        Exec              返回一個數組

Date物件

Math物件

Array物件

        var newArray = new Array(‘1’,’2’);

        var newArray = [‘1’,’2’];

        在建立陣列物件時,引擎會立即將基本資料型別轉換為Array物件,並將結果賦給變數。

        可以根據固定元素個數建立陣列,也可以不提供元素個數任意新增元素。

屬性

        length

        方法

        Splice 在陣列總插入或刪除元素

        Slice 分割陣列  不改變原來的陣列,返回新陣列

        Concat 連線不同的陣列  不改變原來的陣列,返回新陣列

        Join  使用指定的分割符生成字串

        Reverse 對陣列執行倒序排列

佇列

Array物件有4個用於維護佇列和列表的方法:

       push:在最後一個元素後面加入元素,返回陣列新的長度

        unshift   在第一個元素前面加入元素,返回陣列新的長度

        pop:從陣列最末尾移除一個元素,返回被移除的元素

        shift:從陣列頭部移除一個元素,返回被移除的元素

所以:

FIFO佇列:先進先出

    加入在隊尾(push),移除在隊首(shift)

    加入在隊首,移除在隊尾

LIFO佇列:先進後出

    加入在隊尾,移除在隊尾

    加入在隊首,移除在隊首

四、函式

        Javascript中,可以將函式賦給一個變數或陣列元素,也可以將其作為一個引數傳給一個函式呼叫。Javascript中函式有三種建立方法:宣告式的/靜態的、動態的/匿名的、字面量式的。

函式宣告的方式

        引數中的基本型別變數傳給函式的實際上是原始值,如一個字串、一個布林值、一個數字等;這也就意味著在函式中修改實際引數值,不會影響呼叫程式。

        對於傳給函式的物件而言,傳遞的則是一個指向原始物件的引用,在函式中對這個物件的修改將會反映在呼叫程式中。