關(guān)于JavaScript的一些看法
更新時(shí)間:2009年05月27日 17:18:00 作者:
最近在寫(xiě)一個(gè)JS代碼壓縮工具的時(shí)候,感受到JS的強(qiáng)大,同時(shí)也讓我頭疼的一陣子(誰(shuí)叫我是JS菜鳥(niǎo))。
眾所周知,一句JS代碼以分號(hào)結(jié)束和以回車(chē)符結(jié)束在瀏覽器中均能正常運(yùn)行(至少在我的IE7中是這樣)。不知道這是JS語(yǔ)言的特性或者僅僅是解釋器的容錯(cuò)功能?由于回車(chē)符也可以是一句代碼結(jié)束的標(biāo)志,進(jìn)行JS壓縮的時(shí)候就麻煩些了。要壓縮掉所有的回車(chē)符,程序就得知道哪里是一條語(yǔ)句的結(jié)束,并在結(jié)束位置后面添加上";"。這是一件不容易的事情(或許有容易的方法我還沒(méi)想到吧),最后無(wú)賴(lài)我只好采取了一種折中的方法:保留必要的回車(chē)符,去掉";"、","、"+"等等分隔符前后的回車(chē)符。(要是JS也像C++等語(yǔ)言一樣以";"結(jié)尾,那該是多么容易的一件事情?。?
在開(kāi)發(fā)的過(guò)程中,還發(fā)現(xiàn)一個(gè)比較奇怪的問(wèn)題。如下面的代碼所示:
1<body>
2
3<script>
4
5function class1(){};
6
7class1.prototype.ShowMessage = function ShowMsg()
8{
9 alert("ShowMsg Function!");
10}
11var test = new class1();
12test.ShowMessage();
13</script>
14
15</body>
上面的代碼可以正常運(yùn)行。
如果把第11行前的"\n"去掉,即程序變成:
1<body>
2
3<script>
4
5function class1(){};
6
7class1.prototype.ShowMessage = function ShowMsg()
8{
9 alert("ShowMsg Function!");
10} var test = new class1();
11test.ShowMessage();
12</script>
13
14</body>
則將不能正確運(yùn)行,原因在于"= function(){...}"的"}"不能標(biāo)志語(yǔ)句塊結(jié)束。也就是說(shuō),整個(gè)"= function(){...}"僅僅是一條語(yǔ)句,如上所述,一條語(yǔ)句必須以回車(chē)符或者";"結(jié)束。這是和C/C++等又一重大區(qū)別。
介于此,建議大家以后寫(xiě)JS代碼的時(shí)候還是在一句話(huà)后面加";"表示結(jié)束,以避免不必要的BUG。
PS:雖然JS很強(qiáng)大,但是它這些“缺點(diǎn)”真是讓我沒(méi)法喜歡上它。
在開(kāi)發(fā)的過(guò)程中,還發(fā)現(xiàn)一個(gè)比較奇怪的問(wèn)題。如下面的代碼所示:
復(fù)制代碼 代碼如下:
1<body>
2
3<script>
4
5function class1(){};
6
7class1.prototype.ShowMessage = function ShowMsg()
8{
9 alert("ShowMsg Function!");
10}
11var test = new class1();
12test.ShowMessage();
13</script>
14
15</body>
上面的代碼可以正常運(yùn)行。
如果把第11行前的"\n"去掉,即程序變成:
復(fù)制代碼 代碼如下:
1<body>
2
3<script>
4
5function class1(){};
6
7class1.prototype.ShowMessage = function ShowMsg()
8{
9 alert("ShowMsg Function!");
10} var test = new class1();
11test.ShowMessage();
12</script>
13
14</body>
則將不能正確運(yùn)行,原因在于"= function(){...}"的"}"不能標(biāo)志語(yǔ)句塊結(jié)束。也就是說(shuō),整個(gè)"= function(){...}"僅僅是一條語(yǔ)句,如上所述,一條語(yǔ)句必須以回車(chē)符或者";"結(jié)束。這是和C/C++等又一重大區(qū)別。
介于此,建議大家以后寫(xiě)JS代碼的時(shí)候還是在一句話(huà)后面加";"表示結(jié)束,以避免不必要的BUG。
PS:雖然JS很強(qiáng)大,但是它這些“缺點(diǎn)”真是讓我沒(méi)法喜歡上它。
相關(guān)文章
在IE上直接編輯網(wǎng)頁(yè)內(nèi)容的js代碼(IE地址欄js)
在IE上直接編輯網(wǎng)頁(yè)內(nèi)容2009-04-04JS利用正則表達(dá)式實(shí)現(xiàn)簡(jiǎn)單的密碼強(qiáng)弱判斷實(shí)例
這篇文章主要給大家介紹了關(guān)于JS利用正則表達(dá)式實(shí)現(xiàn)簡(jiǎn)單的密碼強(qiáng)弱判斷的相關(guān)資料,實(shí)現(xiàn)后的效果非常簡(jiǎn)單,但也挺實(shí)用的,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。2017-06-06JavaScript合并兩個(gè)數(shù)組并去除重復(fù)項(xiàng)的方法
這篇文章主要介紹了JavaScript合并兩個(gè)數(shù)組并去除重復(fù)項(xiàng)的方法,涉及javascript操作數(shù)組的合并與去重的相關(guān)技巧,需要的朋友可以參考下2015-06-06uniapp定義動(dòng)畫(huà)的幾種方式總結(jié)
我們都知道,動(dòng)畫(huà)其實(shí)是由一幀一幀圖片組成,快遞地播放一組圖片就形成了動(dòng)畫(huà),下面這篇文章主要給大家介紹了關(guān)于uniapp定義動(dòng)畫(huà)的幾種方式,需要的朋友可以參考下2023-02-02JavaScript實(shí)現(xiàn)旋轉(zhuǎn)木馬輪播圖
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)旋轉(zhuǎn)木馬輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03echarts實(shí)現(xiàn)晶體球面投影的實(shí)例教程
這篇文章主要給大家介紹了關(guān)于echarts實(shí)現(xiàn)晶體球面投影的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10