《你不知道的JS(中卷 )》 五 語法

2022-05-17 09:33:58 字數 1390 閱讀 3110

​ 語法(grammar)與詞法(syntax)不同。後者強調語言的運算子、關鍵字等。而語法定義了此法規則是如何構成可執行的程式**的。

語句(statement)與表示式(expression),舉例說明:

var a = 3 * 6;
a = 3 * 6是乙個賦值表示式,加上var,就表明是乙個宣告同時賦值的語句,即語句由乙個或多個表示式組成

語句都有乙個結果值,如果使用控制台,輸入語句,預設情況下控制台會顯式所執行的最後一條語句的結果值。

或者使用eval函式(很多語言都有這個函式,用以將字串視作語句執行,並返回語句結果值)。

var a, b;

a = if (true) ;

a; // 42

1)、大括號:

js中有兩種情況會用到{}:

物件常量

var a = ;

標籤2)、物件解構:

es6中新加了解構賦值:

function getdata() ;

}var = getdata();

console.log(a, b); // 42 "foo"

3)、else if:

js中可以使用else if的原因是,if和else只包含單條語句的時候可以省略**的{}。

​ 利用運算子優先順序可以實現邏輯短路,利用邏輯短路可以實現更簡潔的類似if else的邏輯表達。

​ 雖然js有時會為**行補上缺失的分號,即自動分號插入(automatic semicolon insertion,asi),但是我們不應該依賴他。

​ js擁有各種型別的執行時錯誤(typeerror、referenceerror、syntaxerror等),同時也定義了一些編譯時錯誤(早期錯誤)。

​ 不要再使用arguments陣列。

finally中的**總是會在try之後執行,如果有catch的話則在catch之後執行。也可以將finally中的**看作乙個**函式,即無論出現什麼情況最後一定會被呼叫。

​ 如果有finally語句,try中的continue、break、return語句最後還是要執行finally語句,如果finally報錯(throw)或return、break,try中的結果會被丟棄。

switch (a)
a會與case表示式逐一比較(嚴格相等,===),如果匹配就執行該case中的**。

《你不知道的JS(中卷 )》 二 值

本章介紹js中的幾個內建值型別。類陣列是一些類似陣列的 可以通過數字索引 值,例如set jquery查詢操作會返回dom元素列表。字串也是一種類陣列 數字索引 有length屬性以及indexof 和concat 方法。字串推薦的索引方式是charat 函式。js中只有一種數值型別 number ...

C 中你不知道的語法

傳建構函式,不會引起拷貝建構函式的呼叫 當傳乙個乙個已經構造好的物件時,cpp view plain copy include include include include using namespace std class foo foo foo const foo rhs foo operat...

《你不知道的JS(中卷 )》 四 強制型別轉換

js中強制型別轉換非常常見,常常非常危險。這一章來具體介紹強制型別轉換。將值從一種型別轉換為另一種型別通常有兩種形式 型別轉換 type casting 顯式 強制型別轉換 coercion 隱式 其實這兩種分類的修辭並不特別準確。因為型別轉換 var b 1 var a string b 1 實際...