《JavaScript 闖關記》之語法

来源:http://www.cnblogs.com/shi0090/archive/2016/08/08/5747873.html
-Advertisement-
Play Games

JavaScript 的語法大量借鑒了 C 及其他類 C 語言(如 Java 和 Perl)的語法。因此,熟悉這些語言的開發人員在接受 JavaScript 更加寬鬆的語法時,一定會有種輕鬆自在的感覺。本章主要按照 ECMAScript 3 介紹這門語言的基本概念,並就 ECMAScript 5 的 ...


JavaScript 的語法大量借鑒了 C 及其他類 C 語言(如 Java 和 Perl)的語法。因此,熟悉這些語言的開發人員在接受 JavaScript 更加寬鬆的語法時,一定會有種輕鬆自在的感覺。本章主要按照 ECMAScript 3 介紹這門語言的基本概念,並就 ECMAScript 5 的變化給出說明。

字元集

JavaScript 程式是用 Unicode 字元集編寫的,Unicode 是 ASCII 和 Latin-1 的超集,並支持地球上幾乎所有在用的語言。ECMAScript 3 要求 JavaScript 的實現必須支持 Unicode 2.1及後續版本,ECMAScript 5 則要求支持 Unicode 3及後續版本。

擴展閱讀「Unicode 與 JavaScript 詳解」
http://www.ruanyifeng.com/blog/2014/12/unicode.html

區分大小寫

JavaScript 是區分大小寫的。也就是說,關鍵字、變數、函數名和所有的標識符(identifier)都必須採取一致的大小寫形式。比如,關鍵字 while 必須寫成 while,而不能寫成 While 或者 WHILE。同樣,onlineOnlineOnLineONLINE 是4個不同的變數名。

但需要註意的是,HTML 並不區分大小寫。由於它和客戶端 JavaScript 聯繫緊密,因此這點區別很容易混淆。許多客戶端 JavaScript 對象和屬性與他們所表示的 HTML 標簽和屬性名相同。在 HTML 中,這些標簽和屬性名可以使用大寫也可以是小寫,而在 JavaScript 中則必須是小寫。例如,在 HTML 中設置事件處理程式時,onclick 屬性可以寫成 onClick,但在 JavaScript 代碼中,必須使用小寫的 onclick

註釋

JavaScript 使用 C 風格的註釋,包括單行註釋和塊級註釋。單行註釋以兩個斜杠 // 開頭,塊級註釋以一個斜杠和一個星號 /* 開頭,以一個星號和一個斜杠 */ 結尾。下麵都是合法的 JavaScript 註釋:

// 這裡是單行註釋

/*
 *  這裡是塊級註釋
 *  也叫多行註釋
 */

雖然上面註釋中的第二和第三行都以一個星號開頭,但這不是必須的,純粹是為了提高註釋的可讀性(這種格式在企業級應用中極其常見)。

字面量

所謂字面量(也可稱直接量,Literal values),就是程式中直接使用的數據值。字面量只代表自身,不存儲在特定位置。JavaScript 中的字面量有:字元串、數字、布爾值、對象、數組、函數、正則表達式,以及特殊的 null 值。

"hello world"   // 字元串
123             // 數字
1.2             // 小數
true            // 布爾值
false           // 布爾值
/javascript/gi  // 正則表達式
null            // 空
{ name: 'stone', age: 20}       // 對象
[ 1, 2, 3, 4, 5, 6, 7, 8 ]      // 數組
function(){ console.log('good'); }    // 函數

擴展閱讀「undefined不是字面量」
http://www.cnblogs.com/ziyunfei/archive/2012/11/11/2765096.html

嚴格模式

在 ECMAScript 5 引入了嚴格模式(strict mode)的概念。嚴格模式是為 JavaScript 定義了一種不同的解析與執行模式。在嚴格模式下,ECMAScript 3 中的一些不確定的行為將得到處理,而且對某些不安全的操作也會拋出錯誤。要在整個腳本中啟用嚴格模式,可以在頂部添加如下代碼:

javascript "use strict";

這行代碼看起來像是字元串,而且也沒有賦值給任何變數,但其實它是一個編譯指示(pragma),用於告訴支持的 JavaScript 引擎切換到嚴格模式。這是為了不破壞 ECMAScript 3 語法而特意選定的語法。

在函數內部的第一行包含這條編譯指示,也可以指定函數在嚴格模式下執行:

function doSomething(){
    "use strict"; 
    // 函數體
}

嚴格模式下,JavaScript 的執行結果會有很大不同,因此本課程會隨時指出嚴格模式下的區別。

標識符

所謂標識符,就是指變數、函數、屬性的名字,或者函數的參數。JavaScript 標識符必須以字母、下劃線(_)或美元符號($)開始,後續的字元可以是字母、數字、下劃線或美元符號(數字是不允許作為首字元出現的)。下麵是合法的標識符:

my_variable_name, v12345, _dummy, $str888

標識符中的字母可以包含擴展的 ASCII 或 Unicode 字母字元(如 π),但不推薦這樣做。按照慣例,JavaScript 標識符採用駝峰大小寫格式,也就是第一個字母小寫,剩下的每個有意義的單詞的首字母大寫,例如:

firstSecond, myCar, doSomethingImportant

關鍵字和保留字

ECMAScript 3 描述了一組具有特定用途的關鍵字,這些關鍵字可用於表示控制語句的開始或結束,或者用於執行特定操作等。按照規則,關鍵字是語言保留的,不能用作標識符。以下是 ECMAScript 3 的全部關鍵字:

break       delete      function    return      typeof
case        do          if          switch      var
catch       else        in          this        void
continue    false       instanceof  throw       while
debugger    finally     new         true        with
default     for         null        try

ECMAScript 3 還將 Java 的所有關鍵字都作為自己的保留字。儘管保留字還沒有任何特定的用途,但他們有可能在將來被用作關鍵字:

abstract    double      goto        native      static
boolean     enum        implements  package     super
byte        export      import      private     synchronized
char        extends     int         protected   throws
class       final       interface   public      transient
const       float       long        short       volatile

ECMAScript 5 把非嚴格模式下的保留字縮減為:

class           enum            extends         super
const           export          import

ECMAScript 5 在嚴格模式下的保留字為:

implements      package         public
interface       private         static
let             protected       yield

註意,letyield 是 ECMAScript 5 新增的保留字,其他保留字都是 ECMAScript 3 定義的。為了保證相容性,任何時候都不建議使用 ECMAScript 5 新增的保留字 letyield

ECMAScript 還預定義了很多全局變數和函數,也應當避免把它們用作標識符:

arguments           Error           Math            RegExp
Array               eval            NaN             String
Boolean             EvalError       Number          SyntaxError
Date                Function        Object          TypeError
decodeURI           Infinity        parseFloat      undefined
decodeURIComponent  isFinite        parseInt        URIError
encodeURI           isNaN           RangeError
encodeURIComponent  JSON            ReferenceError

JavaScript 的具體實現可能定義獨有的全局變數和函數,每一種特定的 JavaScript 運行環境都有自己的一個全局屬性列表,這一點是需要牢記的。

可選的分號

和其他許多變成語言一樣,JavaScript 使用分號(;)將語句分隔開。這對增強代碼的可讀性和整潔性是非常重要的。缺少分隔符,一條語句的結束就成了下一條語句的開始,反之亦然。如果語句各自獨占一行,通常可以省略語句之間的分號(程式結尾或花括弧 } 之前的分號也可以省略)。

var sum = a + b     // 即使沒有分號也是有效的語句,不好的寫法
var diff = a - b;   // 有效的語句,好的寫法

雖然語句結尾的分號不是必須的,但請任何時候都不要省略它。因為加上這個分號可以避免很多錯誤,開發人員也可以放心地通過刪除多餘的空格來壓縮 JavaScript 代碼。另外,加上分號也會在某些情況下增進代碼的性能,因為這樣解析解就不必再花時間推測應該在哪插入分號了。

關卡

請判斷以下代碼是否有效?如果有效請給出結果,如果無效請說明原因。

// 挑戰一
var class = 'person';
console.log(class);     // ???
// 挑戰二
var Class = 'person';
console.log(class);     // ???
// 挑戰三
var True = false;
console.log(True);      // ???
// 挑戰四
var true = false;
console.log(True);      // ???
// 挑戰五
var $_$ = 'stone';
console.log($_$);       // ???
// 挑戰六
var 00_name = 'stone';
console.log(00_name);   // ???
// 挑戰七
var Array = 'null';
console.log(Array);     // ???
// 挑戰八
var undefined = 'null';
console.log(undefined); // ???
// 挑戰九
var result = 1 + 2
+ 3 + 4
console.log(result);    // ???

參考、勘誤及提問

本文內容主要基於以下書籍整理,如需瞭解更多細節,可自行查閱原著。

《JavaScript 權威指南(第6版)》
https://book.douban.com/subject/10549733/

《JavaScript 高級程式設計(第3版)》
https://book.douban.com/subject/10546125/

如果您在學習本課程時發現錯誤,或者想提關於本課程的技術問題,可以通過以下方式聯繫我,或在微信公眾號「石佳劼的博客」中給我留言。

Blog:http://shijiajie.com/about
Email:[email protected]

如需瞭解課程最新動態,可在 GitHub Star 該項目。

https://github.com/stone0090/javascript-lessons


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線上預覽 源碼下載 lightgallery.js是一款純JavaScript輕量級響應式lightbox插件。該Lightbox插件支持圖片,視頻,iframe等多種媒體。支持全屏,導航,縮放,下載等功能,還支持多種動畫過渡效果。lightgallery.js的特點還有: 完全響應式設計。 內置插 ...
  • 記得一年前,到一家公司面試的時候,問我position有哪幾個屬性,我憋半天才回答出2個,大家估計都清楚,就是我們經常用到的2個(relative,absolute)。 最近又用到了好多,深入研究了下。 一、語法: position:static | relative | absolute | fi ...
  • html代碼: <div class="div"></div> css代碼: .div{ border-top:40px solid #ff0077; border-left:40px solid #004444; border-bottom:40px solid #999999; border-r ...
  • 安裝Gulp.js Gulp是給予Node.js的,故首先安裝Node.js[1],完成之後執行下麵的命令安裝Gulp: npm install -g gulp //-g (global)執行全局安裝gulp,這樣在任何地方都可以進行 gulp 操作 安裝完成之後,需要在我們的項目中使用,需要命令行 ...
  • var obj1={apple:0,banana:{weight:52,price:100},cherry:97}; $.exytend(obj1); $.cherry >97 $.apple >0 $.banana >{weight:52,price:100} var obj2={banana:{ ...
  • animation-fill-mode是css3動畫的一個屬性,它能夠控制元素在動畫執行前與動畫完成後的樣式。一個帶有延遲,並且按正常方向執行的動畫(正常方向是指從0%運行到100%),執行一次的過程可以描述如下: 按照動畫的執行時間來劃分,一次動畫過程可以將元素劃分為3個狀態:動畫等待,動畫進行和... ...
  • Covering-Bad 是一個可拉動大小的元素,覆蓋在原有的元素上面,從而兩者進行對比。 線上實例 實例演示1 實例演示2 使用方法 複製 參數詳解 下載 ...
  • 引言: 在項目中不同頁面經常要用到已經寫好的交互,比如彈窗,比如下拉菜單,比如選項卡,比如刪除... 此時如果每次都把代碼copy一份無疑是一件比較麻煩並且無趣的事情,而且個人認為有些low了,我們可是要追尋 高大上的90後有為青年呢~可是該如何高大上呢?這時jQuery自定義插件開發來了,第一次聽 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...