后面跟任意的表达式,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'
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
语法: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'
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
当解析器遇到方法定义时,解析器对其进行解析并存储在一个以方法名命名的对象属性中。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:
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
而方法里的局部变量或内嵌方法均存储于此对象属性中),JS两种语法否则是全局对象的属性,方法和变量是在不同时间被解析定义的,方法是在解析的时候被定义的,而变量是在运行的时候被定义的。