1.SyntaxError 語法錯誤
①變量名不規范
// 變量名不規范
var 1 = 1;
未被捕獲的語法錯誤,這個錯誤是js機制自動拋出來的 意外的數字
// 下面兩個是同一種情況
var 1a = 1; function 1test(){}
無效或意外的標記
// 關鍵字賦值
new = 5;
意外的標記 =
下面最后加了冒號
// 基本的語法錯誤
var a = 5:
意外的標記 :
2.ReferenceError 引用錯誤
// 變量或者函數未被聲明
test()
test沒有被定義
// 給無法被賦值的對象賦值的時候
var a = 1 = 2
var a = 2; console.log(a) = 3
無效的左側賦值
3.RangeError 范圍錯誤
// 數組長度為負數時
var arr = [1,2,3] arr.length = -2
無效的數組長度
// 對象方法參數超出可行范圍
var num = new Number(66.66); console.log(num.toFixed(-1));
數字參數參數必須在0到100
4.TypeError 類型錯誤
// 調用不存在的方法
123()
123不管有沒有定義 它都不是一個方法 根本就沒有判斷定義了沒有,先判斷類型,是不是屬於一個function,如果是一個function 后面就可以跟括號
var obj = {}; obj.say();
並沒有在obj里找到say這個方法,這個時候就會報這個錯誤 因為 點 后跟的是屬性名但是帶了括號,屬性不可能像方法一樣執行, 所以要看是不是方法,如果say不帶括號就不會報錯,不帶括號時會認為是個屬性但沒有賦值
// 實例化原始值的問題
var a = new 'string';
new后面必須要是一個構造器 ,new一個原始值會報錯 new后要跟函數 不管是構造函數還是普通函數,只要new函數 就會有實例化 'string' 不是函數就會報錯
var a = new 123;
這個和上面情況一樣,不是構造函數
5.URIError URI錯誤
URI 統一資源標識符 UNIFORM RESOURCE IDENTIFIER
URL 統一資源定位符 UNIFORM RESOURCE LOCATOR
URN 統一資源名稱 UNIFORM RESOURCE NAME
URL和URN是URI的子集,屬於URI
URL有協議有域名有資源空間 通過一個地址能訪問到特定的頁面
URN 沒有了URL中的協議 相當於一個id 名字 指代了資源的唯一性 所以叫NAME
let str = "測試字符"; let encodeStr = encodeURI(str); console.log(encodeStr); // %E6%B5%8B%E8%AF%95%E5%AD%97%E7%AC%A6
let decodeStr = decodeURI(encodeStr); console.log(decodeStr); // 測試字符
上面是使用encodeURI方法把中文轉為中文編碼字符 是js內置的方法,
再使用decodeURI方法把中文編碼字符轉為中文,也是js內置的方法 ,接下來就隨便輸個中文編碼 看能不能轉成中文
let str = "%ef%erffv"; console.log(decodeURI(str));
URI不符合常規的
6.EvalError eval函數執行錯誤
現在很少見 因為很少使用eval方法 (不知道怎么讓它報錯)
es3開始 eval()函數不推薦使用,有性能問題, 難調試, input獲取的值和eval混在一起可能會有安全隱患
eval()最大的作用是字符串里寫js是可以執行的
eval("var a = 1;console.log(a)")
var obj = { a:1, b:2 } console.log(eval("obj"));
打印的不是字符串obj,而是一個對象 換成 console.log(eval(obj)) 也是一樣的
然而eval()方法最大的用處不是在這里
json字符串 使用eval()方法后會變成json對象
eval(jsonStr)
json是用來存儲數據的,json字符串和json對象 里面不可以嵌有方法,如果里面寫的有方法 就是一個普通的對象
這六種錯誤都可以人為的拋出
var error = new Error("代碼錯誤了") console.log(error);
會直接出來Error
人為的實例化一個錯誤 可以實例化構造函數
new SyntaxError("代碼錯誤")
每一種錯誤類型都對應了一個構造函數,這些構造函數都可以通過實例化來輸出響應的錯誤
如果想輸出錯誤變成紅色的 使用console.error()方法