搜尋
首頁web前端js教程JavaScript高階程式設計(第3版)學習筆記2 js基礎語法_基礎知識

這篇複習一下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產品  4、嚴格模式:在ES5中引入嚴格模式,透過使用"use strict"來開啟嚴格模式,可以在頂部開啟全域嚴格模式,也可以在函數作用域範圍內開啟局部嚴格模式。


複製程式碼

程式碼如下: "use strict"//開啟全域全域嚴格模式,在ES3中,不會有任何影響function fn(){   "use strict"//開啟局部嚴格模式
}


5、註解:在ECMAScript中,支援兩種格式的註釋,單行註解與區塊級註解:



複製程式碼
程式碼如下: 程式碼如下:


程式碼如下:

/🎜> / 單行註釋,以兩個斜杠//開頭/*
* 多行(塊級)註釋,以一個斜杠/和一個星號*開頭,一個星號和一個斜杠結尾,這里中間行的星號*不是必須的
*/


說明:隨著JS程式碼越來越複雜,註解也變的越來越重要,而文件自動化也顯得愈加重要,目前已經有很多開源JS函式庫用來自動化產生類似Javadoc的JS文檔,像是JSDoc、YUIDoc等,這個時候,對註解也會有相應的格式要求,有興趣的朋友可以找相關資料研究。
複製代碼


代碼如下:
var age = 29; age = '>age = ' ';  //雖然有這種彈性,但我建議你除非明確知道自己在做什麼,否則別這樣做。
(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);
}

 花括號({})除了作為程式碼區塊來使用外,還有一個很重要的用處就是定義物件字面量,這在後面還會再有論述。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

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

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

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

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

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

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

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

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

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

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

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

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

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

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MinGW - Minimalist GNU for Windows

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

SAP NetWeaver Server Adapter for Eclipse

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

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