下面小编就为大家带来一篇深入理解 ECMAScript 的几个关键语句。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ECMAScript 是一种由 Ecma 国际(前身为欧洲计算机制造商协会)通过 ECMA-262 标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为 JavaScript 或 JScript,但实际上后两者是 ECMA-262 标准的实现和扩展。
写在前面
在这一章中我们聊一聊 ECMAScript 中的几个关键语句 switch、for-in、label 等语句,加深我们对它们的理解和认识。首先从最常见的说起。
while 和 for
while 和 for 是很常规的语句,无论是在 JavaScript 还是 C 还是其他编程语言中。而且在编程中我们较常用的也是 for,for 用起来更灵活,更简单,所以有些人可能就会产生这样一种误解:
for 比 while 更强大,能做到 while 做不到的一些事情。
其实我们稍微想想 while 和 for 语句的语法应用,我们就会发现:
while 循环做不到的 for 循环也做不到。
这是因为 for 循环只是把 while 循环有关的代码集中在了一起而已,其实有些时候,用 while 循环比用 for 循环更简单。这也是各司其职各有利弊吧。
关于循环的另一点,我们先看一段代码:
- for(i=0;i<5;i++){
- console.log(i);
- }
- console.log(i);
在循环外打印 i,打印输出是 5。
可以看到,在循环内部定义的变量在外部也是可以访问的。在一些语言中比如 C,大括号定义的是块级作用域,但是在 ECMAScript 中是没有块级作用域这个概念的,所以在循环内部定义的变量在外部也是可以访问的。
switch 语句
在其他编程语言中比如 C,switch 语句只能使用数字,而在 ECMAScript 中,switch 语句可以使用任何数据类型,像字符串、对象都是可以的。
这里有一点需要说明: switch 语句比较的时候使用的全等操作符,即 ===,所以'10'和 10 不相等,因为在进行全等比较的时候,并不发生类型转换。
for-in 语句
for-in 语句是一种精确性的迭代语句,可以用来遍历对象的属性,当然也可以迭代数组的属性。下面分别以例子说明:
for-in 遍历对象
•window
先遍历一个特殊的对象 window:
- for(var i in window){
- console.log(i);
- }
会打印出一串很长很长的属性列表,大家可自行查看,在此不一一罗列赘述。
• 自定义对象
遍历自定义对象
- var o = {
- prop1: 'value1',
- prop2: 'value2',
- prop3: 'value3'
- };
- for (var i in o) {
- console.log(i);
- }
打印出 prop1 prop2 prop3。
• 数组
遍历数组
- var array1=[1,2,3,4];
- for(var i in array){
- console.log(i);
- }
打印输出 1 2 3 4。
with 语句
with 语句可以用来限制作用域,即可以将代码的作用域设置到一个特定的对象中。如下:
- var hostname=location.hostname;
- var url=location.href;
这两句分别获取 hostname 和 url,因为它们共用 location(同一个对象下的属性),所以我们可以将作用域限定在 location 中,即用 with 语句关联 location 对象。如下:
- with(location){
- var hostname=hostname;
- var url=href;
- }
需要注意的是:严格模式下使用 with 语句会有语法错误,同时,大量使用 with 语句会导致性能下降,同时也会给调试带来一定的困难,所以在开发应用程序的时候,尤其是开发大型应用程序的时候,并不建议使用 with 语句。
label 语句
label 语句用来在代码中加标签,从而可以在以后来使用它。一般情况下,加标签的语句要和 for 循环等循环语句配合来使用。
它的语法是:
- label: statement
下面给出代码详细来看看 label 标签的用法。
1、先给出一段基本的代码:
- var num=0;
- for(var i=0;i<10;i++){
- for(var j=0;j<10;j++){
- if(i==5&&j==5){
- break;
- }
- num++;
- }
- }
- console.log(num);
说明:break 跳出了处在内部的 for 循环,j 剩下的 5 次循环不再执行,所以打印的结果是 95。
2、接下来我们将 break 换成 continue:
- var num=0;
- for(var i=0;i<10;i++){
- for(var j=0;j<10;j++){
- if(i==5&&j==5){
- break;
- }
- num++;
- }
- }
- console.log(num);
说明:continue 跳出了本次循环,就是说跳出了处在内部 for 循环的这一次循环,所以打印的结果是 99。
- var num=0;
- outer:
- for(var i=0;i<10;i++){
- for(var j=0;j<10;j++){
- if(i==5&&j==5){
- break outer;
- }
- num++;
- }
- }
- console.log(num);
说明:加上了标签以后,用 break 跳到了标签 outer 处,就是说程序跳出了外循环,即程序执行到了 i=5 且 j=5 时停止执行,所以打印的结果是 55。
4、我们再换成 continue 看看:
- var num=0;
- outer:
- for(var i=0;i<10;i++){
- for(var j=0;j<10;j++){
- if(i==5&&j==5){
- continue outer;
- }
- num++;
- }
- }
- console.log(num);
说明:这一次用的是 continue,所以当程序执行到 i=5 且 j=5 时并没有跳出外循环,而只是跳出了内循环,即剩下的 5 次不予执行,所以打印的结果是 95。
放在一起这几个显得稍微有些混淆,多理解理解就会好很多。
小结
我们学习一门东西不是为学而学,是为用而学,说白了就是为了工作而学,所以单纯理解上面的东西不是最重要的,不是为记而记,是为用而记,能够熟练运用在实践中才是我们希望的。同时,做笔记是一个很好的习惯,好记性不如烂笔头,如果你在做,那么希望你坚持下去。
以上这篇深入理解 ECMAScript 的几个关键语句就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 phperz。
来源: http://www.phperz.com/article/17/0224/265258.html