日新網培訓Javascript之四.Js語句、對象與數組

來源:互聯網
上載者:User

一、語句

1、複合陳述式 用逗號可以將幾個運算式聯合起來形成一個運算式,用花括弧可以將幾個語句聯合起來形成語句塊。複合陳述式支援break、continue、return、throw語句。

2、switch語句 和C很類似,每個標籤後都要有break,如果沒有匹配標籤,則執列標籤default的內容,如果沒有default,則跳過執行。如果沒有break語句,則會一直執行到終點。需要注意的是:匹配標籤時使用的是===等同運算子,而不是==相等。所以必須保證類型一樣,才有意義。

3、迴圈語句 do/while 至少執行一次 while 與C/C++一樣  for 與C/C++一樣  for/in 類似C#的foreach 但區別之處在於,for/in用來枚舉對象的成員名,而不是成員值。例如for(var i in array) alert(i)只會得到0,1,2,3…… 而只有alert(array[i])才會得到數組的值。同理對象也是,普通的i只會得到對象的屬性名稱。另外,for/in枚舉的順序無法控制,如果在for/in中刪除一個還沒枚舉的屬性,那麼它就被刪除了,不會再被枚舉,如果在for/in中增加一個屬性,那麼它不一定會被枚舉(根據不同的JS實現決定)。另外,並非所有的對象屬性會被枚舉,有些被標記唯讀、永久(不可刪)、不可枚舉的、內部屬性方法無法被枚舉出來。

4、標籤和break與continue 標籤一般在C語言中與goto連用,用來標記一個位置或一個語句塊。在JS中,標籤也有同樣的作用,但它同時可以與break與continue連用。用break與標籤連用後,會中斷當前位置的執行,然後轉到標籤所在位置,但標籤所在位置所包含的語句塊不執行,而執行跳到下面。當然,毫無疑問,break一定要在標籤所標記的語句塊內部才有意義。對於continue只可以用在四種迴圈中,被執行時當前迭代被終止,而進行下一次迭代。對於continue對於四種迴圈的作用,記住一點,都要去檢查下次迴圈的條件。對於for迴圈,會先計算增量運算式,然後再檢查迴圈條件。

5、function與return function用於定義函數,函數只可以在JS頂層代碼中或嵌套在其他函數定義中,不可以出現在if或迴圈等其他語句中。從本質來說function並非一個語句,因為語句是動態,是解釋執行的。而函數定義是靜態,在代碼被開始執行前,JS就會將函數解析並作為屬性儲存區(如果是頂層函數則存於全域變數,嵌套函數則存入所嵌套的對象中)。對於return,可以帶運算式來返回函數執行結果,需要注意的是,如果使用了不帶運算式的return語句或者沒有用return,那麼這個函數的結果就是undefined。

6、throw與try/catch/finally throw可以拋出異常,例如throw new Error('What Happen?')。try{}catch(ex){}finally{},try用來存放執行的命令,catch當捕獲異常後執行,ex存的就是異常對象。finally中存放的代碼總會被執行,一般用來清理操作。注意的是,無論try中是否拋出異常,finally中的語句塊總會執行,即使使用了return、continue、break也一樣。而finally中用了return、continue、break或者throw的話,那麼當前執行的會被捨棄。如果finally塊中拋出異常,那麼該異常將代替拋出過程中的異常。根據這個特性,我們可以使用while和try/finally來實現for迴圈的功能,在finally中實現i++,這樣無論在try塊中使用任何continue、break,i都會++。

7、with語句 就內部來說,with暫時修改了範圍鏈,with(obj){},代碼塊中的成員及運算式的範圍會優先為obj。但就實際應用時,with一般用於減少代碼的輸入,如果用document.getElementById來擷取一個對象並多次修改它的屬性,則可以把它放到with裡,如with(document.getElementById('xxx')){width="";height=""}。但這樣寫卻不如var obj=document.getElementById('xxx');然後使用obj來引用屬性執行起來效率快。所以人們反對使用with語句,建議使用變數來引用with中的東西,這樣方便JS解譯器最佳化。

8、總結一下JS中的語句:break case continue default do/while 空語句 for for/in function if/else label return switch throw try/catch/finally var while with(建議不使用)。

二、對象和數組

1、對象 對象和數組是兩種基礎資料型別 (Elementary Data Type),它們表示一個值的集合(Key-Value)。建立對象最簡單的方法使用JSON直接量。var obj = {屬性名稱:屬性值,……};,另外,可以用new運算子加建構函式建立對象。Object()等同於{}直接量。

2、對象的屬性 用“.”來擷取對象屬性或者用[]來擷取。如果把一個值賦給一個對象中沒有的屬性,則會隱式建立它。屬性的枚舉可以使用for/in,屬性存在性的檢測可以使用in運算子,如if("X" in obj),因為查詢一個並不存在的屬性會返回undefined,所以也可以用!==undefined來查詢是否存在。這裡非常需要注意,因為查詢一個未定義的變數是會出錯的,而查詢一個不存在的屬性確實允許的,一定要區別屬性、變數(Var)、全域變數(全域對象的屬性)。但更需要主要的是,如果把一個屬性賦值為undefined(一般沒人會這樣做),那麼只能用in的方法了。刪除屬性用delete,刪除之後用for/in和in都無法檢測。屬性的實質是JS對象把字串(屬性名稱)映射成值。

3、Object屬性和方法 (1)constructor屬性 引用對象的建構函式,可以判斷物件類型。(2)toString()方法,返回對象的字串表達 (3)toLocaleString() (4)valueOf() 將對象轉換成某種基本類型時自動調用 (5)hasOwnProperty() 測試非繼承屬性 (6)propertyIsEnumerable() 如果可以被for/in的話返回true,否則返回false。一般所有字定義屬性都可以枚舉,而繼承屬性不可以枚舉。(7)isPrototypeOf() 如果調用此方法的對象是參數的原型對象,返回True,否則返回False。

4、數組。用typeof運算子處理數組,返回object。數組儲存採用引用方法,可以嵌套實現多維陣列。建構函式有三種使用方法(1)預設為空白數組,與[]相等。(2)參數指定前N個數的值。(3)參數指定長度。每個值預設為undefined。

5、數組的訪問與操作 數組可以通過下標進行訪問,如果數組下標不存在,則會隱式建立,如果下標不是一個數字或者為負數,則JS會轉換為一個字串,並添加以此字串為名的屬性。JS中數組記憶體配置是動態,而不是一開始固定分配。刪除數組的話,使用delete只會把一個數組元素設定為undefined,而數組元素本身才繼續存在,真正刪除一個數組的話,會使後面的元素向前走一個位置。如a[0,1,2,3]中,如果刪掉0,那麼1,2,3都會向前走一個位置。數組提供了刪除的方法:Array.shift()刪除得一個元素 Array.pop()刪除最後一個元素 Array.splice()刪除一個範圍的元素。

6、數組的長度 數組的長度為length,值為數組下標中最大的下標+1。同時數組長度必須小於2^32 - 1。在遍曆數組時,我們經常使用length屬性,因為數組可能不是連續的,所以在遍曆中最好先用if判斷一下每個位置的值是否存在,

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.