1. 程式人生 > >JavaScript與其他語言的區別與聯絡01

JavaScript與其他語言的區別與聯絡01

   JS是一種專為與網頁互動而設計的指令碼語言,由下列三個不同的部分組成:

     1.ECMAScript,提供核心語言功能;

     2.文件物件模型(DOM),提供與瀏覽器互動的方法與介面;

     3.瀏覽器物件模型(BOM),提供與瀏覽器互動的方法和介面。

語法: ECMAScript的語法大量借鑑了C及其他類C語言(Java和Perl)的語法。

註釋:ECMAScript使用C風格的註釋,包括單行註釋和塊級註釋。

語句:可以使用C風格的語法把多條語句組合到一個程式碼塊中。

操作符:遞增和遞減操作符直接借鑑自C,而且各有兩個版本:前置型和後置型。

函式引數:ECMAScript函式的引數與大多數其他語言中函式的引數有所不同。ECMAScript函式不介意傳遞進來多少個引數,也不在乎傳遞進來引數是什麼資料型別。

                   ECMAScript中的引數在內部是用一個數組表示的。在函式體內可以通過arguments物件來訪問這個引數陣列,從而獲取傳遞給函式的每一個引數。

函式不能實現過載:ECMAScript函式不能像傳統意義上那樣實現過載。而在其他語言(如java)中,可以為一個函式編寫兩個定義,只要這兩個定義的簽名不同即可。ECMAScript函式沒有簽名,應為其引數是由包含零或多個值得陣列來表示的。而沒有函式簽名,真正的過載是不可能做到的。

資料型別:ECMAScript沒有為整點和浮點數值分別定義不同的資料型別,Number型別可用於表示所有數值。ECMAScript有一種複雜的資料型別Object型別,該型別是這門語言中所有物件的基礎型別。

                 在ECMAScript中定義了兩個名字相同的函式,則該名字只屬於後定義的函式。
               ECMAScript中的基本資料型別:Undefined、null、Boolean、Number、String
複雜資料型別:Object(該型別是所有物件的基礎型別),儲存在棧中,指向堆。
ECMAScript沒有為整數和浮點數值分別定義不同的資料型別,Number型別可用於表示所有型別。
無需指定函式的返回值,因為任何ECMAScript函式都可以在任何時候返回任何值。
實際上,未指定返回值的函式返回的是一個特殊的Undefined值。ECMAScript中沒有函式簽名的概念,因為其函式引數是以一個包含零或多個值的陣列的形式傳遞的。
可以向ECMAScript函式傳遞任意數量的引數,並且可以通過arguments物件來訪問這些引數。
由於不存在函式簽名(引數個數與型別)的特性,ECMAScript函式不能過載。
變數、作用域和記憶體問題
變數:包含兩種資料型別值(基本型別值(Undefined、null、Boolean、Number、String)、引用型別值(Object))
基本型別值儲存在棧記憶體中,引用型別是指儲存在堆記憶體中的物件,意思是變數中儲存的實際是一個指標,這個指標指向記憶體中的另外一個位置,該位置儲存物件。
棧記憶體中儲存著基本型別值和引用型別指標。堆記憶體中儲存引用型別值指向的值(物件)。
對於引用型別的值,我們可以為其新增屬性和方法,也可以改變和刪除其屬性和方法。
檢測型別:ECMAScript提供了instanceof操作符,檢測變數是是什麼型別的物件。
typeof弊端:如果變數的值是一個物件或null,則typeof操作符會返回object.
            使用typeof操作符檢測函式時,該操作符會返回“function”。在Safari和Chrome中使用typeof檢測正則表示式時,這個操作符會錯誤的也返回“function”