statment部分,大致上也和C/C++/JAVA相同,所以這邊只有提出一些不同於C/C++的部分。
switch
switch會先運算switch(x),接著再運算每一個case的內容,只要運算完的結果相符(==),就會執行該case的內容,所以case可以是任何的運算式,不過不建議使用side-effect的case,因為對於執行結果很不直覺。
var four = new Number(4); var ten = 10; for (x = 0; x <= 10; x++) { switch(x) { case 1*2: alert("the result is 1*2"); break; case 3: alert("the result is 3"); break; case four: alert("the result is four"); break; case four+1: alert("the result is four+1"); break; case --ten: alert("not recommend"); break; default: } }
for/in
利用for/in可以依序取得array或object的element,但沒有一定的順序,可能會因為不同的JS implementation而有所差異。
var obj = new Object(); obj.x = 100; obj.y = function() { alert('ya') } obj.z = new Date(); for (variable in obj) { alert("obj." + variable + " = " + obj[variable]); }
label
在java script中,label等於是對statment進行命名(naming),可以使用continue重複進入該label/(naming statment),或者break跳過該statment。
test1 : for (var i = 0; i < 3; i++) { test2 : for (var j = 0; j < 3; j++) { if (i == 1 && j == 1) { continue test1; } else { alert("i = " + i + ", j = " + j); } } } var i = 0; test2: while(++i) { if (i > 10) { break test2; } alert(i); }
throw/try/catch/finally
透過try進行捕捉exception,當在try這一block的code發生exception後,就會進入catch執行,而finally是不管有沒有發生exception都會被執行,而exception是透過throw丟出。
function f(x) { if (x == 0) throw new Error("x can't be zero"); } for (var i =5; i > -5; ) { try { f(i); } catch (e) { alert(e); } finally { i--; } }
with
with用來暫時改變scope chain,比如with(object)則會將object加到目前的scope chain中,雖然在使用上可以省略打一些字,但是java script很難對with進行最佳化,以及變數使用上可能會有問題,所以不建議使用。
with(Math) { alert(PI); alert(E); }
沒有留言:
張貼留言