TypeError: ... is undefined
和
ReferenceError: ... is not defined
之間的differnce?
TypeError: ... is undefined
和
ReferenceError: ... is not defined
之間的differnce?
A ReferenceError
當您嘗試使用根本不存在的變量時,會發生。
A TypeError
發生在變量存在時,但您嘗試執行的操作不適合其包含的值的類型。在詳細消息顯示「未定義」的情況下,如果您有一個變量,其值爲特殊值undefined
,並且您嘗試訪問它的一個屬性,則可能會發生這種情況。
請參閱http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/瞭解與此相關的一些討論。
六JavaScript錯誤類型
中的JavaScript 1.5規範定義了六種主要的錯誤類型,如下所示:
的EvalError:當EVAL()函數是一個不正確的方式使用時引發。
RangeError:當數值變量超出允許的範圍時引發。
ReferenceError:使用無效的引用時引發。
SyntaxError:解析JavaScript代碼時發生語法錯誤時引發。
TypeError:當變量的類型與預期不符時引發。
strong text URIError:當以不正確的方式使用encodeURI()
或decodeURI()
函數時引發。
考慮下面的代碼:
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異常。
ECMAScript標準定義了每種錯誤類型在哪種情況下發生。 [見這裏](http://ecma-international.org/ecma-262/5.1/#sec-15.11.6.3)瞭解這些場景的完整列表。 –
你能提供引發這些錯誤的代碼示例嗎? –