首先javascript不是瀏覽器的附屬品,只能說它大多數的運行環境是在瀏覽器中的,但又不僅僅局限於瀏覽器中。它是一門真正的程式設計語言,在這方面它和java、c、c++、c#是等同的,只不過它不直接和操作系統打交道,這也是它相比於其他語言有些特殊和看似簡單的地方。這種問題的根源在於它的翻譯器,.....
首先javascript不是瀏覽器的附屬品,只能說它大多數的運行環境是在瀏覽器中的,但又不僅僅局限於瀏覽器中。它是一門真正的程式設計語言,在這方面它和java、c、c++、c#是等同的,只不過它不直接和操作系統打交道,這也是它相比於其他語言有些特殊和看似簡單的地方。這種問題的根源在於它的翻譯器,因為一個語言的特性怎麼樣全在於它的編譯器或者解釋器怎麼樣,用字元書寫的符合各種語法規則的字元串都是翻譯器內在要求的外在表現。單純的js解釋器的特點就是它自己本身的能力有點小以至於除了只能僅僅是運行一遍源文件外產生不了任何副作用和輸出,像ajax調用網路通信、動態改變樣式、動態改變標簽等這些都不是js解釋器本身自己去做到的,而是js解釋器通過調用與瀏覽器之間的一個中間層來完成的。所以單純的純粹的js解釋器的存在似乎沒有什麼意義,它總是要面向一個宿主環境才有實際作用,它總是要運行在一個比操作系統更高級的平臺中,正因為如此,javascript才說是具有跨平臺性的。
有的地方講到javascript由三部分組成:ECMAScript、DOM、BOM。個人認為這麼劃分是有失偏頗的,這樣劃分組成部分就把js完全限制在了瀏覽器中,感覺js就是瀏覽器的一部分並只能是瀏覽器的一部分,所以要先弄清楚javascript與ECMAScript、DOM、BOM之間的關係。ECMASsript、BOM、DOM這三者的性質是相同的,它們都是某一種規範,一種標準。ECMAScript規定了變數、表達式、語句、函數、對象等語法規則和特性,javascript則是對這些規則的實現。DOM和BOM就是為了html文檔和瀏覽器的操作方便,把瀏覽器暴露給js解釋器的介面做了同一的規範,這些規範的表現就是在不同的瀏覽器中可以用js調用相同的API函數來做相同的事情。因此javascript作為一門獨立的程式設語言,ECMAScript已經涵蓋了它的語法規則和特性,這就已經足夠了。DOM和BOM並不屬於javascript,它倆只是在特定的宿主環境中對js的一種拓展補充。
javascript的詞法結構比較簡單(詞法結構就是規定了標識符什麼樣,怎麼寫註釋,還有語句之間如何間隔),就是它是一門區分大小寫的語言;註釋用//兩道斜杠或者放在/*和 */之間;它的標識符要用數字、字母、下滑下、$符號組成,並且不能和保留字和關鍵字衝突,開頭不能是數字;空格、換行可以隨便加,程式都會做恰當的忽略,這樣可以寫自己喜歡的佈局。分號也是可選的,沒有的話在一行的結尾會自動添加分號。詞法結構只是告訴了我們js源程式文件應該怎麼寫,我們還應該知道都可以寫些什麼,而可以寫些什麼就要看程式設計語言能提供什麼。一般一個程式設計語言最基本的特征就是能夠提供多種數據類型,數據類型就是翻譯器和人的介面,根據機器的特點和人類的認知規律抽象出來的可以用於解決實際問題的類型概念,這樣也便於記憶體的管理並約束人的使用行為提高準確性。
在js程式設計語言中數據類型可以分為兩類:原始類型和對象類型。原始類型中包括數字、字元、布爾、null、undefined,其中null和undefined的取值範圍就一個,那就是null和undefined這兩個關鍵字。對象類型一般情況下就是屬性的集合,但會有特殊的對象,比如說數組array和函數function。要使用這些類型就必須按照語法的要求用特定的記號把這些類型值表示出來,這種本身就表示或者返回某個類型值的寫法就叫表達式。在javascript中,一共有6中最基本的表達式,它們分別是:
- 原始表達式 這種表達式一般就是直接量或者變數等的表示
- 對象和數組初始化表達式 這也可以說是對象直接量和數組直接量,例如 {x:1,y:4} [1,2,3]
- 函數定義表達式 同樣的這是算是函數直接量,語法就是function(參數){代碼段}
- 屬性訪問表達式 屬性訪問有兩種寫法一是點.加標識符的寫法 例如 obj.identifier;二是中括弧[]加裡面的表達式寫法,例如arr[1];j第一種只適用於對象,第二種適用於數組和對象。
- 調用表達式 這是一種特殊的表達式,只適用於函數或者方法,用來執行一塊代碼段並返回一個值。函數和方法本質上都是對象,只不過這個對象有一段附屬的相關聯的可執行代碼塊,並且這段代碼塊可以用對象加()運算符來執行。
- 對象創建表達式 這是通過構造函數創建對象的一種方法,這個表達式返回一個對象。
以上6中表達式可以通過和運算符結合形成更複雜的表達式,運算符可以操作一個或者多個表達式,並可以產生或者不產生副作用來返回一個值。在js中有50個左右的運算符,運算符一般是符號像+、-,但有些也是關鍵字,像instanceof、typeof等,這些運算符可以用於算數表達式、比較表達式、邏輯表達式、賦值表達式等。表達式總會產生一個返回值,而沒有返回值只產生副作用的寫法就是語句了。js中比較常見的語句也是有7種的,它們分別是:
- 表達式語句 這是一種特殊的語句,特殊在它是表達式的,它有個返回值,但它要是以分號結尾的。
- 複雜語句 這種語句寫法就是用一個大括弧{}把多個語句括起來
- 空語句 空語句就是什麼都沒有隻有個一分號。
- 聲明語句 這是用來聲明變數或者函數的
- 條件語句 存在決策點或者分支會用到
- 迴圈語句 代碼存在迴路的時候可以用到 迴圈語句有多種寫法 for、do/while、for/in等
- try/catch/finally 這些語句塊都要使用大括弧,是js的異常處理機制
最後通過對這些語句的構造就可以寫出正確的javascript程式了。