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);
}

沒有留言:
張貼留言