JavaScript学习笔记(三)语句

语句

do-while语句

在对条件表达式求值之前,循环体内的代码至少会被执行一次。

for语句

由于ECMAScript中不存在块级作用域,因此在循环内部的变量也可以在外部访问到。

var count = 10; 
for (var i = 0; i < count; i++){ 
	alert(i); 
} 
alert(i); //10 

for-in语句

for-in 语句是一种精准的迭代语句,可以用来枚举 对象 的属性。

如果对象的属性可以由for-in输出,那么这个属性是可枚举的

for (var propName in window) { 
 document.write(propName); 
} 

ECMAScript 对象的属性 没有顺序 。因此,通过 for-in 循环输出的属性名的顺序是 不可预测 的。
具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异

如果表示要迭代的对象的变量值为 null 或 undefined,for-in 语句会抛出错误。
ECMAScript 5 更正了这一行为;对这种情况不再抛出错误,而只是不执行循环体。为了保证最大限度的兼容性,建议在使用 for-in 循环之前,先检测 确认该对象的值不是 null 或 undefined。
(但我在chrome验证的时候发现如果变量值为null和undefined还是会执行?不过变成最后一个执行?)

label语句

使用label语句可以在代码中添加表亲,以便将来使用

start: for (var i=0; i < count; i++) { 
 alert(i); 
} 

这个例子中定义的 start 标签可以在将来由 break 或 continue 语句引用。加标签的语句一般都要与 for 语句等循环语句配合使用。

break和continue语句

break 和 continue 语句都可以与 label 语句联合使用,从而返回代码中特定的位置。

var num = 0; 
outermost: 
for (var i=0; i < 10; i++) { 
 for (var j=0; j < 10; j++) { 
 	if (i == 5 && j == 5) { 
 		continue outermost; 
 	} 
 	num++; 
 } 
} 
alert(num); //95 

在这种情况下,continue 语句会强制继续执行循环——退出内部循环,执行外部循环。

with语句

with 语句的作用是将代码的作用域设置到一个特定的对象中。
定义 with 语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示:

var qs = location.search.substring(1); 
var hostName = location.hostname; 
var url = location.href; 

上面几行代码都包含 location 对象。如果使用 with 语句,可以把上面的代码改写成如下所示:

with(location){ 
 var qs = search.substring(1); 
 var hostName = hostname; 
 var url = href; 
} 

在这个重写后的例子中,使用 with 语句关联了 location 对象。这意味着在 with 语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location 对象中是否有同名的属性。如果发现了同名属性,则以 location 对象属性的值作为变量的值。
严格模式下不允许使用 with 语句,否则将视为语法错误。

switch 语句

switch 语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而 break 关键字会导致代码执行流跳出 switch 语句。如果省略 break 关键字,就会导致执行完当前 case 后,继续执行下一个 case。最后的 default 关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(因此,也相当于一个 else 语句)。

通过为每个 case 后面都添加一个 break 语句,就可以避免同时执行多个 case 代码的情况。假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了 break 关键字,如下所示:

switch (i) { 
 	case 25: 
 		/* 合并两种情形 */ 
	case 35: 
 		alert("25 or 35"); 
 		break; 
 	case 45: 
 		alert("45"); 
 		break; 
 	default: 
 		alert("Other"); 
} 
 

在ECMAScript中,可以在switch 语句中使用任何数据类型(在很多其他语言中只能使用数值),无论是字符串,还是对象都没有问题。其次,每个 case 的值 不一定 是常量,可以是变量,甚至是表达式。

 switch ("hello world") { 
 	case "hello" + " world": 
 		alert("Greeting was found."); 
 		break; 
 	case "goodbye": 
 		alert("Closing was found."); 
 		break; 
 	default: 
 		alert("Unexpected message was found."); 
} 

使用表达式作为 case 值还可以实现下列操作:

var num = 25; 
switch (true) { 
 	case num < 0: 
 		alert("Less than 0."); 
 		break; 
 	case num >= 0 && num <= 10: 
 		alert("Between 0 and 10."); 
 		break; 
 	case num > 10 && num <= 20: 
 		alert("Between 10 and 20."); 
 		break; 
 	default: 
 		alert("More than 20."); 
} 

这个例子首先在 switch 语句外面声明了变量 num。而之所以给 switch 语句传递表达式 true,是因为每个 case 值都可以返回一个布尔值。这样,每个 case 按照顺序被求值,直到找到匹配的值或者遇到 default 语句为止(这正是这个例子的最终结果)。

switch 语句在比较值时使用的是 全等操作符 ,因此不会发生类型转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值