後面跟任意的表達式,JS兩種語法有明顯不同。匹配時會先計算case後面的表達式再匹配。匹配時用的是 === 符號,而不是 == 符號,所以匹配過程不允許任何類型轉換,default 放在最後只是邏輯上的需求,而它可以放在 switch 內的任何地方。
- var x = 1;
- switch (x + 1) {
- case '2':
- alert('string:2');
- break;
- default:
- alert('default');
- break;
- case 1 + 1:
- alert('number:2');
- break;
- }
- // result:
- // 'number:2'
語法:for(variable in object)
其中 variable 允許任意的表達式,只要計算結果能作為賦值表達式的左側,迭代對象屬性名時並不保證任何特殊的迭代順序,它也只迭代用戶自定義的屬性,而預定義的屬性和方法是不會迭代的(比如:Math 的 cos 屬性)數組本身是一種特殊的對象,當JS兩種語法應用於數組時,迭代的是數組的索引。
- // 將對象 obj 的屬性名復制到數組中
- var obj =
- {
- x: 1,
- y: new Date(),
- z: function() { }
- }
- var arr = new Array();
- var i = 0;
- for (arr[i++] in obj);
- alert(arr[0]);// 'x'
- alert(arr[1]);// 'y'
- alert(arr[2]);// 'z'
當解析器遇到方法定義時,解析器對其進行解析並存儲在一個以方法名命名的對象屬性中。JS兩種語法當這個方法是內嵌在其他方法中時,這個屬性是 call 對象的屬性(每個方法裡都有一個call對象。
- var i = 1;
- single:
- {
- if (i == 1)
- break single;
- i++;
- }
- alert(i);
- out:
- while (i == 1 || i == 3) {
- while (true) {
- i++;
- alert(i);
- if (i == 2) {
- continue;
- }
- else {
- continue out;
- }
- }
- i++;
- alert(i);
- }
- alert(i);
- // result:
而方法裡的局部變量或內嵌方法均存儲於此對象屬性中),JS兩種語法否則是全局對象的屬性,方法和變量是在不同時間被解析定義的,方法是在解析的時候被定義的,而變量是在運行的時候被定義的。