語法
語句表達式
句子是完整表達某個意思的一組詞,由一個或多個短語組成,他們之間由標點符號或連接詞連接起來。
語句相當於句子,表達式相當於片語,運算子則相當於標點符號和連接詞。
JavaScript 中表達式可以傳回一個結果值。
var a = 3 * 6;
b;
var a = 3 * 6; var a = 3 * 6; = a;
陳述語句,因為它宣告了語句a = 3 *# 6;
語句的結果值表達式的副作用
表達式的副作用
運算 var b = a++;
# a; // 43 〠〠 a++先傳回變數
a
的目前值
42 (在將值賦給b),#然後將a 的值加上1; ++ 在前面時,如++a
#將(a遞增)產生在表達式傳回結果之前#而 a++ 的副作用則產生在之後。 ++a++ 會產生
ReferenceError錯誤## ##ReferenceError錯誤
## # var b = (a++);
a; b; // 42
可以使用語句系列運算子將多個獨立的表達式語句串連成一個語句:
var a = 42,b; var a = 42,b;
a ; // 43
b; // 43
# delete
delete》
var obj = {
obj.a; // 42 obj.a; // true obj.a; function vowels(str){ var matches;if(str) {
## matches = str.match(/[aeiou]/g);
# if(matches) { return } 〴〔 〔 一項" ); // ["e","o","o"]
利用賦值語句的副作用將兩個if 語句合二為一
var matches;
///
提取所有元素字母# // if(str && (matches = str.match(/[aeiou]/g))){ return matches;# return
## } 上下文規則# 1.## 1.## 〴量
//假定函數bar()
已經定義
] foo: bar()# }
// 假定函數bar() 已經定義
{
#
}# [] + {}; / / "[object Object]"
{} + []; // 0 另外 H …]常見物件 ] ## function getData() { // ..## // ..## return { b: "foo"
;
}
var { a , b } = = getData();
# console.log(a,b); // 42 "foo"{...} 也可以用作函數命名參數的物件解構,方便隱式地物件屬性賦值。
function foo({a,b,c}){##不在需要這樣:
// var a = obj.a, b = obj.b, c = obj.c
} ## a: 42, ); // 42 "foo" [1 ,2,3]運算子優先權
var b = "foo" ; a && b; // "foo"## 短路
# 對於
&&和
|| 來說,如果從左邊的運算元能夠得出結果,就可以忽略右邊的
運算元,我們將這個現象稱為短路。
a && b || c ? c || b ? a : c && b : a因為 && 運算子的優先級高於#||, 而##|| #的優先順序又高於? :。 (a && b || c) ? (c || b) ? a : (c && b) : a
# ##運算子的關聯不是從左到右就是從右到左,這取決於組合是從左開始
還是從右開始。
var a = foo() && bar();# var a , b , c;
其實是這樣處理的
a = (b = ( c = 42))var a = 42; var c = false;
var d = a && b || c ? c || b ? a : c && b : a; d; // 42## #? ((c || b) ? a : (c && b)) : a1. (a && b)
結果為「foo」.2."foo" || c
結果為#foo 」.
3,第一? 中 “foo” 為真。
4.(c || b) 結果為
"foo". 5.第二個 ? 中,
“foo” 為真值。
6.a的值為#42在編譯階段發生錯誤叫做早期錯誤,語法錯誤是早期錯誤的一種,使用 try..catch
來捕獲語法錯誤瀏覽器一般報 SyntaxError
提前使用變數
死區Zo #作用域區塊 {
let a;}
函數參數
function foo(a = 42, b a + 1 .log(a,b)
}
foo(); // 42 43
foo(undefined); foo(undefined); oo(5); // 5 6
foo( void 0, 7); // 42 7 foo(null )
finally中的程式碼總是會在
try
之後執行,如果有
catch
#的話則在
catch
#之後執行。
可以將finally 中的程式碼看做一個回呼函數,總是在最後一個執行。
switch
# 可以把它看做 if..else if.. else 的簡化版。
switch (a) {
//
執行一些程式碼back;
case 42:
back;
// 執行一些程式碼
}
# 混合環境 # 混合環境
#"動態建立script,
標籤,將其加入到頁面的DOM #。 var greeting = "Hello World"; el.text = "function foo() { alert(greeting); ##el.src
的值設定為URL,就可透過