JavaScript語法中常見的陷阱

即使你是一位經驗豐富的Web開發人員,也可能被某個小問題而陷入幾個小時的沉思
下面看一下九種常見的陷阱
1. 區分大小寫
創建的所有函數和變量都是區分大小寫的
也就是說function myFunction() {}和function MyFunction() {}是不一樣的
2. 單引號與雙引號
單引號(‘字符串’)和雙引號(“字符串”)在JavaScript中沒有特殊的區別,都可以用來創建字符串。但作爲一般性的原則,大多數Web開發人員使用單引號
3. 換行
不論你使用哪種引號來創建字符串,字符串中間都不能包含強制換行符號:
var html = ‘<h2 class=”a”>A list!</h2>
<ol>
<li class = “a”>Foo</li>
<li class = “a”>Bar</li>
</ol>’;

如果這樣做的話,會導致解析錯誤,因爲換行符被解釋爲分號,如果你想告訴瀏覽器這是一個完整的html的話,就得通過反斜槓來轉義換行符
var html = ‘<h2 class=”a”>A list!</h2>\
<ol>\
<li class = “a”>Foo</li>\
<li class = “a”>Bar</li>\
</ol>’;

如果使用第三方壓縮工具來壓塑代碼的話,上面這種方法也是會出現問題的,我們還有另外一種方案就是使用字符串操作符(+)並將每一行用引號括起來:
var html = ‘<h2 class=”a”>A list!</h2>\
+ ‘<ol>’
+’<li class = “a”>Foo</li>’
+’<li class = “a”>Bar</li>’
+’</ol>
’;
4. 可選的分號和花括號
用分號來結束一行代碼並不是必須的
alert(‘hello’)
alert(‘world’)

等同於
alert(‘hello’);
alert(‘world’);

但是如果是有邏輯關係的話,就不能這樣等同了
if(a==b)
alert(‘true!’)
alert(‘false?’)

不同於
if(a==b) {
alert(‘true!’);
}
alert(‘false?’);

5. 重載(並非真正的重載)
JavaScript是不支持重載,我們這裏將的更像是替換。
對於重載而言,假設有下面兩個同名函數:
function myFunction(a,b) { alert(a+b);}
function myFunction(a) {alert(a);}

在程序中根據參數的不同,會調用不同的函數來處理,但這在JavaScript是能實現的,對於JavaScript,它是不會考慮函數定義時的參數的,它會直接使用作用域鏈中最後定義的那個函數,也就是說相同的函數永遠只存在一個實例i,所以當你創建自己的函數時,確保沒有覆蓋掉JavaScript核心元素,除非你希望那麼做,假設,我們創建瞭如下函數:
function alert(message) {
//LEO.$方法是我自己一個JS庫中的方法
LEO.$(‘messageBox’).appendChild(document.createTextNode(message));
}

那麼當調用alert時,瀏覽器並不會像往常那樣提示一個信息,而是按照我新定義的alert函數來執行相應動作
6. 函數的調用和引用(不帶括號)
var fun1 = exampleFunction();
var fun2 = exampleFunction;

發現上述的不同之處了嗎?,區別在於fun2的exampleFunction沒有圓括號,它對結果的影響極大,沒有圓括號的話,fun2得到的是函數本身,而不是結果,我們就把fun2作爲參數傳遞給其他方法
[align=right][b]《AdvancED DOM Scripting Dynamic Web Design Techniques》[/b][/align]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章