語法(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 實際...