這篇複習一下ECMAScript規範中的基礎語法,英文好的朋友可以直接閱讀官方文件。 JavaScript本質上也是一種類C語言,熟悉C語言的朋友,可以非常輕鬆的閱讀這篇文章,甚至都可以跳過,不過建議你最好還是看一看,在介紹的同時,我可能會引用一些自認為不易理解且比較流行的用法。
基礎語法
1、標識符:所謂標識符,實際上就是指一個滿足某一規範,能夠被引擎識別的名字,可以用來表示常數、變數、函數名、函數參數、物件、物件屬性等所有可命名對象的名稱。
(1)區分大小寫。
(2)以字母、底線(_)或美元符號($)開頭,其它字元可以為字母、底線、美元符號或數字。這裡的字母包含擴充的ASCII或Unicode字元。
(3)標識符不能是關鍵字、保留字、true、false、null。 (有些瀏覽器允許使用undefined,有些不能)。
(4)如果物件屬性含有空格或其它特殊字符,可以用括號括起來作為一個整體。
2、關鍵字:在語言本身有特定用途。
break case catch continue debugger(ES5中新增) 差 if in instanceof new return switch this throw try 『
3、保留字:被語言本身保留,將來可能會作為關鍵字。ES3中的保留字:
abstract boolean byte char class const debugger 行 n const debugger 四 float goto implements import int interface long native package publicvate 腳 native package 甀private 腳材 銫 tec synchronized throws transient volatile
ES5中的非嚴格模式下的保留字:
class const enum export extends import ner
ES5的嚴格模式下的保留字:
implements interface let(ES5中新增) package private pro產品
複製程式碼
5、註解:在ECMAScript中,支援兩種格式的註釋,單行註解與區塊級註解:
複製程式碼
程式碼如下:
* 多行(塊級)註釋,以一個斜杠/和一個星號*開頭,一個星號和一個斜杠結尾,這里中間行的星號*不是必須的
*/
說明:隨著JS程式碼越來越複雜,註解也變的越來越重要,而文件自動化也顯得愈加重要,目前已經有很多開源JS函式庫用來自動化產生類似Javadoc的JS文檔,像是JSDoc、YUIDoc等,這個時候,對註解也會有相應的格式要求,有興趣的朋友可以找相關資料研究。
代碼如下:
(2)var操作符:變數使用var來聲明,對於未初始化的變量,會預設為undefined,也可以直接使用變數而不聲明(在我看來,這同樣是一個沒有存在理由的特性),它們之間最重要的區別是使用var聲明時,聲明的變數只在當前作用域有效,而不使用var時,變數就會定義在全域作用域。可以通過下面的例子來體會其中的區別:
var name = 'linjisong'; //定義全域變數並賦值
age = 29; //直接使用變量,相當於定義全域變數並賦值
//sal; //錯誤
var salary; / /定義全域變量,未初始化
//這裡只是函數聲明,沒有實際調用,所以內部定義的變數不會生效
function fn(){
var name = 'oulinhai';//定義局部變數並賦值
age = 23; //給全域變數賦值
work = 'it'; //沒有使用var,即使是在函數局部的變量,也會成為全域變數
}
//函數實際呼叫前
console.info(salary); //undefined
console.info(name); // linjisong
console.info(age); // 29
try{
console.info(work);//由於在全域環境中沒有定義work,這裡會拋出異常
}catch(e){}
fn();//實際調用,程式碼中變數的變更會顯現出來
console.info(name); // linjisong,由於函數內部使用了var,所以不會改變全域的name值
console.info(age); // 23
console.info(work); // it
(3)宣告提升:這個問題在講函數宣告和函數表達式時還會再談到,這裡先提一下,看程式碼:
console.info(name); /undefined
console.info(getName);//getName()函數
console.info(getName());//undefined
try{
console.info(age);//異常
}catch(e){
console.info(e);//ReferenceError
}
console.info(getAge);//undefined
try{
console. info(getAge());//異常
}catch(e){
console.info(e);//TypeError
}
var name = 'linjisong';//變數聲明,提升
age = 29;//直接使用全域變量,不提升
function getName(){//函數聲明,提升
return name;
}
var getAge = function( ){//變數getAge的聲明,提升;取得年齡的匿名函數表達式,不提升
return age;
}
console.info(name);//linjisong
console.info (getName);//getName()函數
console.info(getName());//linjisong
console.info(age);//29
console.info(getAge);//取得年齡的匿名函數
console.info(getAge());//29
你有沒有自己推論出上面的輸出結果?如果已經推斷出,可以跳過了,如果還存有疑問,那麼先看看下面關於聲明提升的描述,然後再回過頭來印證上面的輸出結果:
A、引擎在解析時,首先會解析函數聲明,然後解析變數宣告(解析時不會覆寫型別),最後再執行程式碼;
B、解析函數宣告時,會同時解析型別(函數),但不會執行,解析變數宣告時,只解析變數,不會初始化。
這裡涉及的只是全域作用域,在函數作用域中還有函數參數也和宣告提升有關,在後面講述函數時再討論。
上面的程式碼,首先會把第18行的函數宣告和第16、21行的變數宣告提升到最開始解析,然後再執行。因此第1、9行因為變數宣告提升但尚未初始化,所以輸出undefined,從而第11行因為無法確定是函數類型而拋出類型異常;第2、3行因為函數宣告提升且解析函數類型,所以第2行輸出函數,第3行可以呼叫函數,但傳回值未初始化而輸出undefined;第5行因為尚未宣告變數,會拋出引用例外。
(4)可以使用一條語句定義多個變量,用逗號分開即可。如:
var name='linjisong' age=29,
work='it';
(5)在ES5的嚴格模式下,無法定義名為eval或arguments的變數。
7、語句
(1)語句:以一個分號「;」結尾,如果省略分號,由解析器決定語句的結尾。
對於JS中語句可以省略分號的特性,我想不到任何存在的理由,強烈建議每條語句均使用分號來明確結束,不要讓解析器花費時間來「猜測」你的程序,而且,更重要的是,在許多壓縮工具中,猜測並不能保證百分之百的正確。
(2)代碼區塊:以左花括號({)開始,右花括號(})結束。
在JS中雖然有程式碼區塊的概念,但是卻沒有對應的區塊級作用域,這是和一般類別C語言所不同的。對於控制語句(例如if),不要因為只有一條語句就不使用程式碼區塊,這會給維護你程式的伙計種下犯錯的種子。
for(var i=0; i{
}
console.info(i);//輸出10,在程式碼區塊之後仍可以存取i,說明JS無區塊級作用域
if(i //console.info(i); 不使用程式碼區塊,在維護時(例如新增1條語句)容易犯錯
{
console.info(i);
}
花括號({})除了作為程式碼區塊來使用外,還有一個很重要的用處就是定義物件字面量,這在後面還會再有論述。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。