# javascript快速入門7--ECMAScript語法基礎
## ECMAScript的基礎概念
熟悉Java、C和Perl這些語言的開發者會發現ECMAScript的語法很容易掌握,因為它借用了這些語言的語法。Java和ECMAScript有一些關鍵語法特性相同,也有一些完全不同。ECMAScript的基礎概念如下:
* 區分大小寫。與Java一樣,變量、函數名、運算符以及其他一切東西都是區分大小寫的,也就是說,變量test不同于變量Test。
* 變量是弱類型的。與Java和C不同,ECMAScript中的變量無特定的類型,定義變量時只用var運算符,可以將它初始化為任意的值。這樣可以隨時改變變量所存數據的類型(盡管應該避免這樣做,但作為Web開發,這確實可以提高效率)。
* 每行結尾的分號可有可無。Java、C和Perl都要求每行代碼以分號(;)結束才符合語法。ECMAScript則允許開發者自行決定是否以分號結束一行代碼。如果沒有分號,ECMAScript就把這行代碼的結尾看作該語句的結尾(與Visual Basic和VBScript相似),前提是這樣沒有破壞代碼的語義。最好的代碼編寫習慣是總加入分號,因為沒有分號,有些瀏覽器就不能正確運行!
* 注釋與Java、C和PHP語言的注釋相同。ECMAScript借用了這些語言的注釋語法。有兩種類型的注釋——單行注釋和多行注釋。單行注釋以雙斜線(//)開頭。多行注釋以單斜線和星號(/*)開頭,以星號加單斜線結尾(*/)。
* 括號表明代碼塊。從Java中借鑒的另一個概念是代碼塊。代碼塊表示一系列應該按順序執行的語句,這些語句被封裝在左括號({)和右括號(})之間。
一些示例如下:
```
var txt = "some string";
TXT = "other string";//TXT無須聲明,可以直接賦值
alert(txt==TXT);//false
var str = "string" //分號可有可無
var hob = "No";var bob = "Yes";//使用分號,可以在一行上寫多行語句
/* 多行注釋
alert("注釋中的代碼不會被執行") */
if (txt=="some string") {//代碼塊
alert(true);
}
```
## 變量
如前所述,ECMAScript中的變量是用var運算符(variable的縮寫)加變量名定義的,例如:
```
var test = "Hello!World!";
```
在這個例子中,聲明了變量test,并把它的值初始化為"Hello!World!"(字符串)。由于ECMAScript是弱類型的,所以解釋程序會為test自動創建一個字符串值,無需明確的類型聲明。還可以用一個var語句定義兩個或多個變量:
```
var a = "some",b="string"
```
前面的代碼定義了變量test,初始值為"some",還定義了變量test2,初始值為"string"。不過用同一個var語句定義的變量不必具有相同的類型,如下所示:
```
var a=12,b="string";
```
即使a和b屬于兩種不同的數據類型,在ECMAScript中這樣定義也是完全合法的。與Java不同,ECMAScript中的變量并不一定要初始化(它們是在幕后初始化的,將在后面討論這一點)。因此,下面一行代碼也是有效的:
```
var a; //只聲明
```
此外,與Java不同的還有變量可以存放不同類型的值。這是弱類型變量的優勢。例如,可以把變量初始化為字符串類型的值,之后把它設置為數字值,如下所示:
```
var test = "string";
alert(test); //.....若干代碼后
test=123;//更改了類型
alert(test);
```
這段代碼將毫無問題地輸出字符串值和數字值。但是,如前所述,使用變量時,好的編碼習慣是始終存放相同類型的值。變量名需要遵守兩條簡單的規則:
* 第一個字符必須是字母、下劃線(_)或美圓符號($)
* 余下的字符可以是下劃線、美圓符號或任何字母或數字字符。
下面的變量名都是合法的:
```
var a; var $a; var $; var _a; var _; var a23;
```
當然,只是因為變量名的語法正確并不意味著就該使用它們。變量還應遵守一條著名的命名規則:
* Camel標記法——首字母是小寫的,接下來的單詞都以大寫字母開頭
* Pascal標記法——首字母是大寫的,接下來的單詞都以大寫字母開頭
* 匈牙利類型標記法——在以Pascal標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i表示整數,s表示字符串
下面的表列出了用匈牙利類型標記法定義ECMAScript變量使用的前綴:
| 類型 | 前綴 | 示例 |
| --- | --- | --- |
| 數組 | a | aValues |
| 布爾型 | b | bFound |
| 浮點型(數字) | f | fValue |
| 函數 | fn | fnMethod |
| 整型(數字) | i | iValue |
| 對象 | o | oType |
| 正則表達式 | re | rePattern |
| 字符串 | s | sValue |
| 變型(可以是任何類型) | v | vValue |
下面是一些命名示例 ?
```
var userName="CJ";//駝峰命名方式
var UserName="CJ";//Pascal命名方式
var sUserName="CJ";//匈牙利命名方式
```
ECMAScript另一個有趣的方面(也是與大多數程序設計語言的主要區別)是在使用變量之前不必聲明。例如:
```
var str ="some";
otherStr += str+" "+"string";
alert(otherStr);
```
在上面的代碼中,變量otherStr并沒有用var運算符定義,這里只是插入了它,就像已經聲明過它。ECMAScript的解釋程序遇到未聲明過的標識符時,用該變量名創建一個**全局變量**,并將其初始化為指定的值。這是該語言的便利之處,不過如果不能緊密跟蹤變量,這樣做也很危險。最好的習慣是像使用其他程序設計語言一樣,總是聲明所有變量。
## 關鍵字
ECMA-262定義了ECMAScript支持的一套關鍵字(keyword)。這些關鍵字標識了ECMAScript語句的開頭和/或結尾。根據規定,關鍵字是保留的,不能用作變量名或函數名。下面是ECMAScript關鍵字的完整列表:
| | | |
| --- | --- |
| break | else | new | var |
| case | finally | return | void |
| catch | for | switch | while |
| continue | function | this | with |
| default | if | throw |
| delete | in | try |
| do | instanceof | typeof |
如果把關鍵字用作變量名或函數名,可能得到諸如“Identifier expected”(應該有標識符,缺少標識符)這樣的錯誤消息。
## 保留字
保留字是對于JavaScript有特殊含義的單詞。因此,不能將它們用作變量名或函數名。也就是說,它們可能是JavaScript未來版本中的命令。現在就應該避免使用它們,以免在新版本發布時不得不修改代碼。如果將保留字用作變量名或函數名,那么除非將來的瀏覽器實現了該保留字,否則很可能收不到任何錯誤消息。當瀏覽器將其實現后,該單詞將被看作關鍵字,如此將出現關鍵字錯誤。
ECMAScript 3為以后保留的單詞:
| | |
| --- | --- |
| abstract | final | protected |
| boolean | float | public |
| byte | goto | short |
| char | implements | static |
| class | import | super |
| const | int | synchronized |
| debugger | interface | throws |
| double | long | transient |
| enum | native | volatile |
| export | package | extends |
| private |
ECMAScript 4:ECMAScript4現在還沒有什么實現.ECMAScript4中,下面的不再是保留字了,但也應該盡量不要使用它們
```
boolean final short byte float static char int double long
```
下面的被加入了保留字
```
as namespace use false true null is
```
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具