JavaStript 簡介
JavaScript誕生於 1995年。當然,它的主要目的是處理以前由服務器端語言負責的一些輸入驗證操作。
JavaScript的組成:ECMAScript(JS語法)、DOM(頁面文檔對象模型)、BOM(瀏覽器對象模型)
如今,JavaStript的用途早就不再侷限於簡單的數據驗證,而是具備了與瀏覽器窗口及其內容等幾乎所有方面交互的能力。今天JavaScript 已經成爲一門功能全面的編程語言,能夠處理複雜的計算交互,擁有了閉包、匿名函數、甚至元編程等特性。
學習JavaScript ,學會它是一件很快速的事情,但是想要學精全面掌握 JavaScript ,就需要搞清楚它的本質、歷史和侷限性。
JavaScript 是一門動態型的、弱類型的解釋型編程語言。
JavaScript 與 Java 的區別
javascript 和 java並不是一共東西,也沒有什麼聯繫,二者之間可以說是 ‘雷鋒與雷鋒塔’ 之間的關係。只是名字有相同的地方,其他沒有任何關係。
javascript 和 java是兩個公司開發的不同的產品。
Java 是原 Sun Microsystems公司推出的面向對象的程序設計語言,特別適用於網絡應用程序開發; Java 的前身是 Oak語言。
Javascript 是 Netscape 公司的產品,爲了擴展 Netscape 瀏覽器的功能而開發的一種可以嵌入 web 頁面中運行的基於對象和事件驅動的解釋型語言。Javascript的前身是 LiveScript。
當時 Netscape 之所以將 LiveScript 命名爲 JavaScript,是因爲 Java 是當時最流行的編程語言,帶有 "Java" 的名字有助於這門新生語言的傳播。也可以理解爲 “蹭熱度”。
兩種語言的區別:
java 是一種真正面向對象的編譯型語言,哪怕是簡單的程序也必須設計對象,java源代碼在執行之前,必須經過編譯; java採用的是強類型變量檢查,所以變量在編譯之前必須做聲明。
javascript 是一種弱類型解釋性腳本語言,可以用來製作與網絡無關的,與用戶交互作用的複雜軟件。它是一種基於對象(Object-Based)和事件驅動(Event-Driven)的編程語言,因而它本身提供了非常豐富的內部對象供設計人員使用。可以用來製作與網絡無關的,與用戶交互作用的複雜軟件。它是一種基於對象(Object-Based)和事件驅動(Event-Driven)的編程語言,因而它本身提供了非常豐富的內部對象供設計人員使用。JavaScript中變量是弱類型的,甚至在使用變量前可以不作聲明,JavaScript的解釋器在運行時檢查推斷其數據類型。
瀏覽器執行JavaScript的過程
瀏覽器分爲兩部分:渲染引擎 和 JS引擎
渲染引擎:用來解析HTML 和CSS,俗稱內核,例如chrome 瀏覽器的blink,老版本的webkit
JS引擎:也稱爲 JS解釋器。用來讀取網頁中的 JS代碼,對齊處理後運行,例如chrome的V8引擎
瀏覽器本身並不會執行JS代碼,而是通過 JS引擎(解釋器)來執行JS代碼,JS引擎執行代碼時逐行進行解釋每一句源碼(轉換爲機器語言 二進制),然後由計算機去執行,所以JS語言被歸爲腳本語言,會逐行進行解釋。
大小區分大小寫 寫
區分大小寫
ECMAScript 中的一切(變量、函數名、操作符)都區分大小寫。變量名Text 和 變量名text 分別表示兩個完全不同的變量,而函數名不能使用 typeof,因爲 typeof 是一個關鍵字,但是 typeOf 完全可以是一個有效的函數名。
function typeOf(){
console.log(111);}
typeOf();
// 111
function typeof(){}
typeof();
// SyntaxError: function statement requires a name [函數語句需要一個名字]
注意:
HTML 中並不區分大小寫(儘管XHTML區分大小寫)。許多客戶端JavaScript對象和屬性與他們表示的HTML 標籤的屬性同名。在HTML中,在這些標籤和屬性名可以使用大寫也可以使用小寫,而在 JavaScript中則必須是小寫。
例如,在HTML中設置事件處理程序時,oncilck屬性可以寫成 onClick,但是在 javascript代碼中,必須使用小寫的onclick。
標識符
標識符,就是指變量、函數名、屬性的名字、或者是函數的參數。標識符可以是按照下列格式規則組合起來的一個或是多個字符:
1、第一個字符必須是一個字母、下劃線( _ )或是一個美元符號($)
2、其他字符可以是字母、下劃線、美元符號或數字。
標識符中的字母也可以包含擴展的 ASCII 或是 Unicode 字母字符,但是不推薦這樣做。
JS中的標識符采用駝峯大小寫格式,第一個字母小寫,剩下的每個單詞的首字母大寫,例如:userName。
不能把關鍵字、保留字、true、false、null用作標識符。
註釋
JS使用 C風格的註釋,包括單行註釋 和 塊級註釋,以及HTML風格的註釋。
注意:
註釋一定要精確的描述代碼,沒有用的註釋甚至比不寫註釋更糟糕。
塊級註釋可以跨行書寫,但是不能嵌套書寫。
1、單行註釋由兩個斜槓( // )開頭,如下所示:
// 我是一行註釋
2、塊級註釋使用一個斜槓和一個星號開頭(/*),使用一個星號和一個斜槓結尾(*/),如下所示:
/*
*
* 我是一個多行(塊級)註釋
*
*/
雖然上面的註釋中的第二行第三行都是以一個星號開頭,但是這個星號不是必需。之所以添加那兩個星號,僅僅是爲了提高註釋的可讀性(這種格式在企業級應用中比較常見)
塊級註釋不可以嵌套。嵌套後會報錯
/*
我是註釋1
/*
我是註釋2
*/
*/
注意:
塊級註釋/**/中的那些字符也可能出現在正則表達式字面量裏,所以塊級註釋對於被註釋的代碼塊來說是不安全的
/*
var rm_a = /a*/.match(s);
*/
3、HTML 風格的註釋僅僅適用於單行註釋,其實 javascript 解釋器對於 <!--的處理和對 // 的處理是一樣的。
<!-- javascript中的註釋
HTML文檔的註釋,需要完整的註釋標記
<!-- HTML 註釋-->
但是在 JS中,會把--!>看作是被註釋內容的一部分。
因爲JavaScript 解釋器在處理這種風格的註釋時與HTML的做法不同,爲了避免發生混淆,並不建議在Javascript代碼中使用HTML 風格的註釋。
快捷鍵:
單行註釋 ctrl + /
多行註釋 ctrl + / + shift
嚴格模式
ECMAScript 5引入了嚴格模式(strict mode)的概念。
嚴格模式是一種特殊的執行模式,它修復了部分語言的不足,提供更強的錯誤檢查,並增強安全性。這樣的一個好處就是向上兼容,比如某個瀏覽器不支持這種模式的話就會被當成普通的字符串被忽略掉。
1、修復了語言上的不足:例如禁用 with。大量使用 with 語句會導致下降,同時也會給調試代碼困難。
2、提供更強的錯誤檢查:例如重複的在字面量中寫重複的屬性名,或者刪除一些不可配置的屬性,或者嘗試給沒有申請的變量賦值而隱式的創建了全局變量,這裏都有檢錯的機制。
3、安全性上:例如eval 變成獨立作用域,對動態執行代碼的時候相對會比較安全。
嚴格模式是爲了 JS 定義了一種不同的解析與執行模式。在嚴格模式下,ECMAStript3 中的一些不確定的行爲將得到處理,而且對某些不安全的操作也拋出錯誤。要在整個腳本中啓用嚴格模式,可以在頂部添加如下代碼:
"use strict"
這段代碼看起來像字符串,而且也沒有賦值給任何變量,但其實它是一個編譯指示(pargma),用於告訴支持JS 的引擎切換到嚴格模式。這是爲了不破壞 ECMAStript3 語法而特意選定的語法。
在函數內部上方包含這條編譯指示,也可以指定函數在嚴格模式下執行:
function fun() {
"use strict";
//函數體
}
在嚴格模式下,JavaStript 的執行結果會有很大不同。
支持嚴格模式的瀏覽器包括 IE10+、FireFox 4+、Safari5.1+、Opera 12、Chrome。
語句
1、分號
JS中的語句使用分號結尾(;)如果省略分號,則由解析器確定語句的結尾,如下所示:
var aa = 'aa'
//即使沒有分號也是有效語句(不推薦使用)
var bb = 'bb';
//有效的語句(推薦使用)
語句結尾的分號並不是必須的,但是建議任何時候都不要省略分號。因爲加上分號可以避免很多錯誤(例如不完整的輸入),也可以更加放心的壓縮 JS代碼(代碼結尾的地方沒有分號會導致壓縮錯誤)。
另外,加上分號也會某些情況下增加代碼的性能,因爲這樣解析器就不需要在花費時間推測哪裏應該加入分號了。
2、花括號{}
可以使用 C風格的語法將多條語句組合到一個代碼塊中,即代碼塊以花括號包裹({})
while(true) {
alert('wwwww');
}
雖然條件控制語句(例如 if)只在執行多條語句的情況下才要求代碼塊,但是最好是始終在控制語句中使用代碼塊(即使代碼塊中只有一條語句),例如:
if(aa == 0)
console.log(aa);
//有效但是容易出錯(不推薦使用)
if(aa == 0) {
console.log(aa);
}
//推薦使用的方式
注意:
在控制語句中使用代碼塊可以使代碼意圖更加清晰,同時也可以降低修改代碼時的出錯的機率。
空白
空白通常沒有意義,有時必須要使用空白來份分隔字符序列,否則就會被合併成一個符號
var arr = true;
var 關鍵字和 arr變量名之間的空格不可以被省略,其他的空格可以移除。
JavaScript 會忽略程序中標識之間的空格。多數情況下,javascript 同樣會忽略換行符。由於可以在代碼中隨意使用空格和換行,因此可以採用整齊、一致的縮進來形成統一的編碼風格,從而提高代碼的可讀性
javascript 將如下這些識別爲空白字符(WhileSpace)
\u0009 水平製表符 <TAB>
\u000B 垂直製表符 <VT>
\u000C 換頁符 <FF>
\u0020 空格符 <SP>
\u00A0 非中斷空格符 <NBSP>
\uFEFF 字符序標記
javascript 將如下這些識別爲終止符(LineTerminator)
\u000A 換行符 <LF>
\u000D 回車符 <CR>
\u2028 行分隔符 <LS>
\u2029 段落分割符 <PS>
JavaScript關鍵字和保留字
在JavaScript中一些字符是用作保留關鍵字的,不能作爲變量名或是函數名
JavaScript 保留關鍵字不可以用作變量、標籤或者函數名。有些保留關鍵字是作爲 Javascript 以後擴展使用。
關鍵字和保留字不是不同的,關鍵字只是保留字的一部分。保留字包括關鍵字、未來保留字、空字面量和布爾值字面量。
* 標記的關鍵字是 ECMAScript5 中新添加的。
應該避免使用 JavaScript 內置的對象、屬性和方法的名稱作爲 Javascript 的變量或函數名。
還應該避免使用 HTML 事件句柄的名稱作爲 Javascript 的變量及函數名,例如:
參考資料:
《JavaScript 高級程序設計(第3版)》
https://www.jianshu.com/p/2a4b5a7ba026
https://www.cnblogs.com/xiaohuochai/p/5543930.html