搜尋
首頁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數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)