javascript 中有六種不同分類的錯誤物件:EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError。不同的瀏覽器,可能會將同一個錯誤,放在不同的分類中。這幾個物件都繼承物件 Error 的特徵與方法。
EvalError | RangeError | ReferenceError | SyntaxError | TypeError | URIError |
使用函式 eval() 不當時,系統會拋出此物件實體。
- 程式用法:
<script type='text/javascript'>
try
{
var a=1, b=2;
var eval2 = eval;
eval2("document.write(a+b)");
document.write('<br />沒被執行');
}
catch(e)
{
if( e instanceof EvalError)
document.write( 'ok' );
document.write( e.toString() );
}
</script> - 執行結果:
3
沒被執行
- 網路上有文件說 eval() 不可以間接使用,否則會發生錯誤。這個範例顯示,間接呼用eval() 並不會發生錯誤。
呼用函式時,參數的數值超過有效範圍,系統會拋出此物件實體。會發生在建立陣列時;或呼用數值物件的方法 toExponential, toFixed, toPrecision 時。
- 程式用法:
<script type='text/javascript'>
try
{
var a=new Array(123456798765433456789);
document.write('沒被執行 : '+ a);
}
catch(e)
{
document.write( e.toString() );
}
</script> - 執行結果:
RangeError: Invalid array length
使用無效的記憶體位址時,系統會拋出此物件實體。
- 程式用法:
<script type='text/javascript'>
try
{
var a = AJK;
document.write('沒被執行');
}
catch(e)
{
document.write( e.message );
}
</script> - 執行結果:
AJK is not defined
呼叫未定義的函式。
- 程式用法:
<script type='text/javascript'>
try
{
noFunc();
}
catch(e)
{
for(k in e)
document.write(k +' : '+ e[k] +'<br />');
}
</script> - 執行結果:
解讀 eval() 的源碼時,發現文法錯誤,系統會拋出此物件實體。
- 程式用法:
<script type='text/javascript'>
try
{
eval('b:=3;');
document.write('沒被執行');
}
catch(e)
{
document.write( e.toString() );
}
</script> - 執行結果:
SyntaxError: Unexpected token '='
使用的變數或參數,其型態不符時,系統會拋出此物件實體。
- 程式用法:
<script type='text/javascript'>
try
{
document.xyz('您好');
document.write('沒被執行');
}
catch(e)
{
document.write( e.toString() );
}
</script> - 執行結果:
TypeError: document.xyz is not a function
呼用 encodeURI() or decodeURI() ,所給予的參數,不合 URI 格式,系統會拋出此物件實體。
- 程式用法:
<script type='text/javascript'>
try
{
var a=decodeURI('%E6%82%A8%E5%A5%BD.html');
document.write(a +'<br />');
var a=decodeURI('%%82%A8%E5%A5%BD.html');
document.write('沒被執行');
}
catch(e)
{
document.write( e.toString() );
}
</script> - 執行結果:
您好.html
URIError: URI malformed
上述物件都繼承物件 Error 的特徵與方法。