指令碼疑難排解
更新:2007 年 11 月
無論是程式設計新手還是老手,每一種程式設計語言都隱藏著他們意想不到的困難和意外。這裡列出您在撰寫 JScript 指令碼時可能遇到的一些疑難問題。
語法錯誤
因為程式設計語言的語法比自然語言的語法還要嚴謹得多,所以在撰寫指令碼時,對小細節多加注意是十分重要的。例如,您想要讓某個特定參數成為一個字串,卻忘記以引號括住那個參數,則可能遭遇錯誤。
指令碼解譯的順序
在 Web 網頁中,JScript 的解譯方法是根據每個瀏覽器的 HTML 剖析程序而定。<HEAD> 標記內的指令碼之解譯會早於 <BODY> 標記中的文字。因此,當瀏覽器剖析 <HEAD> 項目時,<BODY> 標記中所要建立的物件是不存在的,所以無法由指令碼操作。
![]() |
---|
這種情形只會發生在 Internet Explorer 中。ASP 和 WSH 有不同的執行模型 (如同其他的主應用程式)。 |
強制型轉
JScript 是不嚴格規定型別且會自動強制型轉 (Coercion) 的語言。因此,雖然不同型別的值事實上並不相等,但下列範例中的運算式還是會被評估為 true。
"100" == 100;
false == 0;
如果要檢查型別和值是否相同,請使用絕對等號比較運算子 (===)。以下兩種評估都為 false:
"100" === 100;
false === 0;
運算子優先順序
在評估運算式時的操作執行順序時,主要決定於運算子優先順序,而不是運算子在運算式的順序。因此在以下範例中,即使運算式中的減法運算子位於乘法運算子之前,乘法的執行還是先於減法。
theRadius = aPerimeterPoint - theCenterpoint * theCorrectionFactor;
如需詳細資訊,請參閱運算子優先順序。
將 for...in 迴圈與物件搭配使用
當指令碼使用 for...in 迴圈逐步處理物件屬性時,不一定能夠預測或控制將物件欄位指派給迴圈計數器變數的順序。再者,不同的語言實作也可能會有不同的順序。如需詳細資訊,請參閱 for...in 陳述式。
with 關鍵字
with 關鍵字十分便於用來定址已存在於所指定之物件中的屬性,但是它無法用來將屬性加入物件中。若要在物件中建立新屬性,您必須特別指向物件。如需詳細資訊,請參閱 with 陳述式。
this 關鍵字
雖然 this 關鍵字存在於物件的定義之內,但如果目前執行中的函式不是物件定義,您不能經常使用 this 或類似的關鍵字來參考該函式。如果將函式當做設定到物件的方法,指令碼在函式中可使用 this 關鍵字,以便參考物件。如需詳細資訊,請參閱 this 陳述式。
撰寫會在 Internet Explorer 或 ASP.NET 中寫入指令碼的指令碼
如果解譯器遇到 </SCRIPT> 標記,便會結束目前的指令碼。若要顯示 "</SCRIPT>" 本身,必須至少將它重寫為兩個以上的字串,例如 "</SCR" 和 "IPT>",這樣就可以在寫出這兩個字串的陳述式中將它們串連在一起。
Internet Explorer 中的隱含視窗參考
因為可以同時開啟一個以上的視窗,對任何視窗而言都隱含參考至現有視窗。至於其他視窗,則必須使用明確的參考。
請參閱
工作
以 Visual Studio 撰寫 JScript 程式碼
概念
以 Visual Studio 進行 JScript 的偵錯