2009年7月23日 星期四

javascript(3) - statement


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


沒有留言:

張貼留言

熱門文章