儘管其名稱不同,JavaScript 只與 Java 相關,因為兩者都共用 語法相似處一開始,JavaScript 的語法 偏見受到 Java 語法的啟發,稱為「LiveScript」第一次 於 1995 年推出 Netscape Navigator 測試版,兩者皆是為了配合 表示 Netscape 和其他已命名產品/服務經營「線上」的事實加以表揚 。Microsoft 發布了自己的 JavaScript 實作。 「JScript」Internet Explorer 3.0 才會開始支援此功能。
Netscape 將這項早期作業提交至 Ecma International: 制定並公布技術標準, 其他瀏覽器應該能理解指令碼語言。1997 年,Ecma 國際發行的 ECMA-262,將第一版腳本標準化 ECMAScriptECMAScript 是決定建立廣告的標準 更加具體的指令碼語言 例如 Microsoft 之後會負責 現在已經淘汰 JScript、Adobe 的 ActionScript 和 JavaScript 本身。
如要討論 JavaScript。「ES5」是指第一大「版本化」 2009 年 ECMAScript 標準,歷經數年的骨質發展。 「ES6」(簡稱「ES2015」) 是第六版 ECMAScript,於 2015 年推出。在 ES6 之後,新版 ECMAScript Standard 的發布時間是每年發布一次,且會分別反映每個版本的異動和新增項目 稱為「ES2016」的年份或「ES2017」
基本規則
與編譯語言不同,JavaScript 不會從使用者撰寫的程式碼翻譯而成 然後為瀏覽器能理解的格式將指令碼傳送至瀏覽器 連同標記、圖片和樣式表等素材資源,瀏覽器會解讀這類檔案 相同的寫法:這就是人類可讀的萬國碼 (Unicode) 字元序列 剖析方式為由左至右,由上而下。
JavaScript 解譯器接收指令碼後,會先執行 詞法分析,剖析組成指令碼的一長串字元 並將其轉換為下列獨立的輸入元素:
- 詞元
- 格式控製字元
- 行結束字元
- 留言
- 空白字元 (幾乎 一律代表 Tab 和空格)。
重新載入或離開頁面後,系統不會保留指令碼的結果 ,除非您明確明確指示在 建立指令碼
整體而言,JavaScript 應用程式是由「陳述式」和 expressions。
聲明
陳述式是指由一或多行程式碼組成的指令單位,
都代表動作舉例來說,您可以使用以下陳述式進行指派
將值新增至名為 myVariable
的變數:
let myVariable = 4;
myVariable;
> 4
陳述式的結尾必須是分號,系統才能正確解讀。不過, 編寫 JavaScript 時不一定要使用分號。稱為 自動插入分號:可讓您換行 在完整陳述式之後中斷 分號會導致錯誤發生。
ASI 是指錯誤修正,而不是 JavaScript 本身的權限。由於 過度依賴這項錯誤修正會造成混淆 程式碼,仍應手動以半形分號為每個陳述式結尾。
區塊陳述式
區塊陳述式會將任意數量的陳述式和宣告組合成組合
括號 ({}
)。這項功能可讓您將陳述式結合到 JavaScript 的位置
只會有一項
你會最常在旁邊看到區塊陳述式
控制流程陳述式
例如 if
:
if ( x === 2 ) {
//some behavior;
}
運算式
運算式是會產生值的程式碼單位,因此可能會
在預期內使用任何值的位置。2 + 2
是一種運算式,會產生
值 4
:
2 + 2;
> 4
「群組運算子」是一組與括號相符的括號 組合運算式,確保運算式的一部分 會視為單一單元進行評估舉例來說,您可能會使用分組運算子 覆寫運算順序, 或提升程式碼的可讀性:
2 + 2 * 4;
> 10
( 2 + 2 ) * 4;
> 16
let myVariable = ( 2 + 2 );
myVariable;
> 4
打字較弱
JavaScript 是一種輕微類型的語言,意味著資料值不需要 明確標示為特定資料類型 有別於高度輸入的語言,JavaScript 可以根據 並將值轉換為該類型。這項程序稱為 type coercion。
舉例來說,如果你以強類型語言將數字新增至字串值, 則會導致錯誤:
>>> "1" + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
JavaScript 會將數字值強制轉換為字串,而不會傳回錯誤 並串連這兩個值,當 將任何值轉換為字串:
"1" + 1;
> "11"
資料類型也可以明確強制轉換。以下範例強制轉換
使用 JavaScript 的內建功能將數值 100
設為 "100"
的字串值
toString
方法:
let myVariable = 100;
typeof myVariable;
> "number"
myVariable = myVariable.toString();
> "100"
typeof myVariable;
> "string"
區分大小寫
有別於 HTML 和大部分的 CSS,JavaScript 本身都區分大小寫。 因此,您必須一律一致地將所有內容大寫,包括 為您定義的 ID 內建的屬性和方法 你自己。
console.log( "Log this." );
> Log this.
console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;
myvariable;
> Uncaught ReferenceError: myvariable is not defined
myVariable;
> 2
空白字元
JavaScript 不區分大小寫。這表示解譯器會忽略 空格的數量和類型 (定位點或空格)
console.log( "Log this" );console.log("Log this too");
> "Log this."
> "Log this too."
但空白字元的情況可能很重要 詞法認證:
let x;
[符記:[let]
[x]
]
letx;
> Uncaught ReferenceError: letx is not defined
[符記:[letx]
]
使用空白字元分隔有意義的詞語符記時,剖析器 會忽略空白字元的數量和類型:
let x = 2;
[符記:[let]
[x]
[=]
[2]
]
換行符號也是如此,但在某些情況下,可以換行 導致問題提前結束陳述式):
let x
=
2;
[符記:[let]
[x]
[=]
[2]
]
像平常一樣,某些類型的陳述常會佔據一行:
let x = 1;
let y = 2;
有些陳述式通常會使用多行:
if ( x == 2 ) {
//some behavior;
}
不過,這些慣例僅為確保內容可讀性。JavaScript 以上範例的解釋方式如下:
let x=1;let y=2;
if(x==2){}
因此,這套自動化程序會從 準備 JavaScript 時,可縮減傳輸大小的指令碼檔案是很常見的步驟 執行多項最佳化作業
在 JavaScript 中使用空白字元主要是取決於作者 維護人員偏好設定有多個開發人員的 JavaScript 專案 貢獻的程式碼常會建議或強制執行特定空白字元慣例 確保程式碼格式一致,例如使用 Tab 鍵或空格 使用縮排巢狀陳述式:
let myVariable = 10;
if ( typeof myVariable === "number" ) {
console.log( "This variable is a number." );
if( myVariable > 5 ) {
console.log( "This variable is greater than five." );
}
}
> "This variable is a number."
> "This variable is greater than five."
隨堂測驗
什麼是運算式?
JavaScript 有大小寫之分,