2012-09-25 65 views
5

什麼差異類型錯誤和引發ReferenceError

TypeError: ... is undefined 

ReferenceError: ... is not defined 

之間的differnce?

+0

ECMAScript標準定義了每種錯誤類型在哪種情況下發生。 [見這裏](http://ecma-international.org/ecma-262/5.1/#sec-15.11.6.3)瞭解這些場景的完整列表。 –

+0

你能提供引發這些錯誤的代碼示例嗎? –

回答

10

A ReferenceError當您嘗試使用根本不存在的變量時,會發生。

A TypeError發生在變量存在時,但您嘗試執行的操作不適合其包含的值的類型。在詳細消息顯示「未定義」的情況下,如果您有一個變量,其值爲特殊值undefined,並且您嘗試訪問它的一個屬性,則可能會發生這種情況。

請參閱http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/瞭解與此相關的一些討論。

7

六JavaScript錯誤類型

中的JavaScript 1.5規範定義了六種主要的錯誤類型,如下所示:

的EvalError:當EVAL()函數是一個不正確的方式使用時引發。

RangeError:當數值變量超出允許的範圍時引發。

ReferenceError:使用無效的引用時引發。

SyntaxError:解析JavaScript代碼時發生語法錯誤時引發。

TypeError:當變量的類型與預期不符時引發。

strong text URIError:當以不正確的方式使用encodeURI()decodeURI()函數時引發。

3

考慮下面的代碼:

function foo(){ 
var d=1234; 
console.log(d.substring(1,2));  
} 
foo(); 

這將有以下的輸出:

異常:類型錯誤:d.substring不是函數 這是因爲我們使用了錯誤的類型(數字)對於給定的操作(需要字符串的子字符串)。當值不是預期類型時,TypeError對象表示錯誤。

function foo(){ 
var d=1234; 
console.log(c); 
} 
foo(); 

這將有以下的輸出:

異常:的ReferenceError:C沒有定義 這是因爲變量「C」的參考並不在本地或全局範圍存在,我們仍然試圖使用它。訪問不存在的變量時引發ReferenceError異常。