深入理解ECMAScript的幾個(gè)關(guān)鍵語(yǔ)句
寫(xiě)在前面
在這一章中我們聊一聊ECMAScript中的幾個(gè)關(guān)鍵語(yǔ)句switch、for-in、label等語(yǔ)句,加深我們對(duì)它們的理解和認(rèn)識(shí)。首先從最常見(jiàn)的說(shuō)起。
while和for
while和for是很常規(guī)的語(yǔ)句,無(wú)論是在JavaScript還是C還是其他編程語(yǔ)言中。而且在編程中我們較常用的也是for,for用起來(lái)更靈活,更簡(jiǎn)單,所以有些人可能就會(huì)產(chǎn)生這樣一種誤解:
for比while更強(qiáng)大,能做到while做不到的一些事情。
其實(shí)我們稍微想想while和for語(yǔ)句的語(yǔ)法應(yīng)用,我們就會(huì)發(fā)現(xiàn):
while循環(huán)做不到的for循環(huán)也做不到。
這是因?yàn)閒or循環(huán)只是把while循環(huán)有關(guān)的代碼集中在了一起而已,其實(shí)有些時(shí)候,用while循環(huán)比用for循環(huán)更簡(jiǎn)單。這也是各司其職各有利弊吧。
關(guān)于循環(huán)的另一點(diǎn),我們先看一段代碼:
for(i=0;i<5;i++){ console.log(i); } console.log(i);
在循環(huán)外打印i,打印輸出是5。
可以看到,在循環(huán)內(nèi)部定義的變量在外部也是可以訪(fǎng)問(wèn)的。在一些語(yǔ)言中比如C,大括號(hào)定義的是塊級(jí)作用域,但是在ECMAScript中是沒(méi)有塊級(jí)作用域這個(gè)概念的,所以在循環(huán)內(nèi)部定義的變量在外部也是可以訪(fǎng)問(wèn)的。
switch語(yǔ)句
在其他編程語(yǔ)言中比如C,switch語(yǔ)句只能使用數(shù)字,而在ECMAScript中,switch語(yǔ)句可以使用任何數(shù)據(jù)類(lèi)型,像字符串、對(duì)象都是可以的。
這里有一點(diǎn)需要說(shuō)明:switch語(yǔ)句比較的時(shí)候使用的全等操作符,即===,所以'10'和10不相等,因?yàn)樵谶M(jìn)行全等比較的時(shí)候,并不發(fā)生類(lèi)型轉(zhuǎn)換。
for-in語(yǔ)句
for-in語(yǔ)句是一種精確性的迭代語(yǔ)句,可以用來(lái)遍歷對(duì)象的屬性,當(dāng)然也可以迭代數(shù)組的屬性。下面分別以例子說(shuō)明:
for-in遍歷對(duì)象
•window
先遍歷一個(gè)特殊的對(duì)象window:
for(var i in window){ console.log(i); }
會(huì)打印出一串很長(zhǎng)很長(zhǎng)的屬性列表,大家可自行查看,在此不一一羅列贅述。
•自定義對(duì)象
遍歷自定義對(duì)象
var o={prop1:'value1', prop2:'value2', prop3:'value3'}; for (var i in o){ console.log(i); }
打印出prop1 prop2 prop3。
•數(shù)組
遍歷數(shù)組
var array1=[1,2,3,4]; for(var i in array){ console.log(i); }
打印輸出1 2 3 4。
with語(yǔ)句
with語(yǔ)句可以用來(lái)限制作用域,即可以將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中。如下:
var hostname=location.hostname; var url=location.href;
這兩句分別獲取hostname和url,因?yàn)樗鼈児灿胠ocation(同一個(gè)對(duì)象下的屬性),所以我們可以將作用域限定在location中,即用with語(yǔ)句關(guān)聯(lián)location對(duì)象。如下:
with(location){ var hostname=hostname; var url=href; }
需要注意的是:嚴(yán)格模式下使用with語(yǔ)句會(huì)有語(yǔ)法錯(cuò)誤,同時(shí),大量使用with語(yǔ)句會(huì)導(dǎo)致性能下降,同時(shí)也會(huì)給調(diào)試帶來(lái)一定的困難,所以在開(kāi)發(fā)應(yīng)用程序的時(shí)候,尤其是開(kāi)發(fā)大型應(yīng)用程序的時(shí)候,并不建議使用with語(yǔ)句。
label語(yǔ)句
label語(yǔ)句用來(lái)在代碼中加標(biāo)簽,從而可以在以后來(lái)使用它。一般情況下,加標(biāo)簽的語(yǔ)句要和for循環(huán)等循環(huán)語(yǔ)句配合來(lái)使用。
它的語(yǔ)法是:
label: statement
下面給出代碼詳細(xì)來(lái)看看label標(biāo)簽的用法。
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);
說(shuō)明:break跳出了處在內(nèi)部的for循環(huán),j剩下的5次循環(huán)不再執(zhí)行,所以打印的結(jié)果是95。
2、接下來(lái)我們將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);
說(shuō)明:continue跳出了本次循環(huán),就是說(shuō)跳出了處在內(nèi)部for循環(huán)的這一次循環(huán),所以打印的結(jié)果是99。
3、接下來(lái)我們加上一個(gè)名為outer的label標(biāo)簽再分別看打印結(jié)果:
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);
說(shuō)明:加上了標(biāo)簽以后,用break跳到了標(biāo)簽outer處,就是說(shuō)程序跳出了外循環(huán),即程序執(zhí)行到了i=5且j=5時(shí)停止執(zhí)行,所以打印的結(jié)果是55。
4、我們?cè)贀Q成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);
說(shuō)明:這一次用的是continue,所以當(dāng)程序執(zhí)行到i=5且j=5時(shí)并沒(méi)有跳出外循環(huán),而只是跳出了內(nèi)循環(huán),即剩下的5次不予執(zhí)行,所以打印的結(jié)果是95。
放在一起這幾個(gè)顯得稍微有些混淆,多理解理解就會(huì)好很多。
小結(jié)
我們學(xué)習(xí)一門(mén)東西不是為學(xué)而學(xué),是為用而學(xué),說(shuō)白了就是為了工作而學(xué),所以單純理解上面的東西不是最重要的,不是為記而記,是為用而記,能夠熟練運(yùn)用在實(shí)踐中才是我們希望的。同時(shí),做筆記是一個(gè)很好的習(xí)慣,好記性不如爛筆頭,如果你在做,那么希望你堅(jiān)持下去。
以上這篇深入理解ECMAScript的幾個(gè)關(guān)鍵語(yǔ)句就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript indexOf方法入門(mén)實(shí)例(計(jì)算指定字符在字符串中首次出現(xiàn)的位置)
這篇文章主要介紹了JavaScript indexOf方法入門(mén)實(shí)例,indexOf方法用于計(jì)算指定字符在字符串中首次出現(xiàn)的位置,需要的朋友可以參考下2014-10-10深入解析JavaScript中的arguments對(duì)象
arguments是JavaScript里的一個(gè)內(nèi)置對(duì)象,像數(shù)組結(jié)構(gòu)一樣存儲(chǔ)參數(shù)的傳遞,這里我們就來(lái)深入解析JavaScript中的arguments對(duì)象,需要的朋友可以參考下2016-06-06javascript replace()第二個(gè)參數(shù)為函數(shù)時(shí)的參數(shù)用法
replace()函數(shù)具有替換功能,它可以具有兩個(gè)參數(shù),第一個(gè)參數(shù)可以是要被替換的字符串或者匹配要被替換字符串的正則表達(dá)式,第二個(gè)參數(shù)可以是替換文本或者一個(gè)函數(shù),下面看一下關(guān)于replace()函數(shù)的幾個(gè)代碼實(shí)例2016-12-12javascript學(xué)習(xí)筆記(二十) 獲得和設(shè)置元素的特性(屬性)
javascript學(xué)習(xí)筆記之獲得和設(shè)置元素的特性(屬性)介紹,學(xué)習(xí)js的朋友可以參考下2012-06-06