日新網培訓Javascript之三.Js核心文法及物件類型

來源:互聯網
上載者:User

一.JS變數

1、傳值與傳址 數字和布爾為實值型別,複製、傳參、比較均針對值。對象為地址類型,複製操作預設為淺度複製,僅僅將引用複製一份。傳參則為傳地址,比較對象時也是比較兩者地址(是否為同一對象)。字串為特殊類型,每次對字串操作均會重建該串(在串本身不變的條件下,無法修改串中某字元),任何對其的修改都會重建值。複製和傳參為傳址,比較則為值比較。
2、變數的聲明 用Var聲明變數如果不給初值,值為undefined。Var聲明的變數是永久性的,只可以在生命週期結束後被記憶體回收,而不可以用delete手動刪除。用Var聲明已存在變數則為指派陳述式。如果嘗試讀一個未聲明的變數的值,注意這裡是“讀”而不是“寫”,會引發一個異常。如果給一個未用Var聲明的變數賦值,則會隱式聲明這個變數為全域變數(這裡是“寫”)。

3、變數範圍 JS中變數範圍分為全域和局部,對於全域變數不用解釋,哪裡都可以直接存取到。對於局部變數,需要特別說明一下,JS沒有塊級範圍,意思就是說,JS中的變數不會理會像If,While之後的“{}”,而只會理會function這種函數範圍。如果在一個函數塊中,套用了n層的If,而在最內層的If中Var a;,那麼容易在函數開頭用alert(a);仍然不會報錯,而結果是undefined。

4、JS垃圾收集 JS垃圾收集使用的也是引用記數方法,每增加一個引用記數+1,每取消一個引用-1,當引用為0時自動消毀對象釋放空間。

5、變數與屬性的區別 在一個對象內部定義的變數,就是屬性。兩者沒有本質區別。

6、this的使用 在頂層代碼中(在函數以外),用引用全域對象,全域對象JS解譯器在程式開始時建立(執行JS之前),所有全域變數都為全域對象的屬性。在方法函數代碼塊中,使用this可以引用“調用方法的對象”(有時可以理解為所屬對象),例如在A對象中的B()方法,在B中的實現可以用this來指代A對象,這種情況僅僅出現在某對象的方法中,如果某函數不是某對象的方法,而僅僅是個普通函數,那麼在其內使用this會引用全域對象。其實簡單的區別函數和方法,函數沒有上面的對象,而方法是要通過對象調用的。而且兩者聲明也不一樣。

7、範圍鏈 函數或方法中引用一個變數時,會尋著範圍鏈的順序許怒找變數的定義,範圍鏈的最後一個節點是全域變數,如果全域沒有並且是讀操作,則報錯。範圍鏈的順序,對於嵌套函數來說,是從內到外的。

二、運算式和運算子

1、相等運算子(==)與等同運算子(===) ==採用比較寬鬆的比較,允許進行類型轉換。而===不允許,直接檢測兩個運算數是否相等。對角基本類型時使用值比較,比較參考型別時使用引用比較(對象、數組、函數只有是同一個對象時才想等)。特別的就是null和undefined相等,但不等同。

2、比較子 大於 小於 大於等於 小於等於  這四類比較子只可以在數字和字串上執行。數字比較不用說,字串比較則逐個字元的Unicode,如果兩者混合,則系統儘力轉換成數字比較,如果轉換不成數字,則返回FALSE。對象之間比較,如果可以轉換,會優先轉數字,之後String。如果兩個運算數轉不成String或數字,則返回FALSE。

3、in運算子 in要求左邊是個字串,右邊是一個對象或數組。如果左邊的字串是右邊的一個屬性名稱,則返回TRUE,反之FALSE。

4、instanceof運算子 左邊是一個對象,右邊是物件類型。如果左邊的對象是右邊的執行個體,則返回T,否則F。

5、邏輯運算子 &&和|| 特性:如果A&&B,A可以“轉為”F,則B不會計算,返回A的值。如果A可以“轉為”T,會計算B的值,如果B為值。同理,||為或運算子,在A||B中,如果A的值可以“轉為”T,則不計算後面的值,返回A。如果A的值“轉為”F,則計算B,並返回B。這個特性可以用來改寫if語句:if(a==b) stop();改寫為(a==b)&&stop();

6、位元運算符 這個應用比較少,如果需要瞭解,去Google下,不再詳細總結。但要知道移1位就是乘2或除2。

7、=賦值運算子 只有一點需要說,運算式(A=B)的值為B。即返回=號右邊的值。

8、typeof 對變數使用,返回一個代表變數類型名的字串。同時,typeof也可以做為函數使用,參數為變數。

9、new運算子與delete運算子 new 建構函式可以返回一個對象。 delete用於刪除指定對象的屬性、數組元素或變數。如果刪除成功,返回T,如果運算數不能刪除(Var聲明的不能刪除,系統核心屬性和瀏覽器屬性不能刪除)則返回F。注意的是,如果delete刪除的是一個不存在的屬性,則返回T。如果delete後面的運算數不是屬性、數組或變數時,它僅僅返回true。另外,delete隻影響屬性值,不會影響被這些屬性引用的對象,即只取值 (Dereference),跟刪除對象一點關係沒有,當對象的引用記數為0時,記憶體回收自動刪除對象,這與delete沒有關係。

10、void運算子 void A; 則會計算A的值,但整個運算式只會返回undefined,作用以後講用戶端應用時會講,同時,這個也可以用來求undefined。

11、逗號運算子 A,B,C 會按順序計算A、B、C的值,整個運算式返回C的值。

12、[]可以用來存取數組和對象成員。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.