最近開始使用Chrome控制台檢測代碼錯誤,對於經常碰到的報錯做一個匯總,免得每次遇到都要重新想一遍策略,錯誤原因,重復勞動,浪費時間。
由於不是每個錯誤都能碰到,以下僅列出個人寫代碼時經常碰到的報錯,以及個人理解與解決辦法。隨着時間的增長,遇到其他錯誤時再更新。
Chrome控制台報錯匯總:
1、 Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'
在'節點'上執行函數'appendChild'失敗:不是節點
原因:要插入的內容不是節點,無法插入。
解決辦法:返回檢查准備插入內容的節點屬性。若要插入純文本,請使用document.createTextNode()進行文本節點創建(我犯的錯誤,囧)。
2、Invalid or unexpected token
無效的符號
原因:多見於插入中文符號,如‘;’。
解決辦法:根據報錯行提示,返回編輯器查找符號錯誤進行修改。
3、2 arguments required, but only 1 present.系列
需要2個參數,當前只有1個參數
原因:函數方法中必需的參數沒有寫全。例如setAttribute(attr,val),必需兩個參數都寫全。
解決方法:檢查所調用函數的所需參數值,填寫完整。
4、 XXX(變量名) is not defined
變量沒有被創建
原因:引用的變量名寫錯,或者在let及const聲明,對變量初始化與賦值前引用了變量。
解決辦法:① 查找變量在環境中的位置,確保調用位於變量聲明后;
② 確認變量名沒有打錯;
5、Identifier XXX(變量名) has already been declared
變量已經被聲明
原因:變量名重復(使用var聲明的話,不會出現此錯誤)。
解決方法:換個變量名。
6、 Assignment to constant variable
給一個常量配值
原因:變量為const聲明的常量,無法對常量值進行修改。
解決辦法:將const聲明修改為let或var聲明
7、Exception: DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
阻止了一個域為null的frame頁面訪問另一個域為null的頁面
原因:打開本地頁面時,頁面中存在多個frame框架,造成了跨域訪問
解決辦法:localhost訪問本地頁面
8、Uncaught DOMException: Failed to execute 'webkitMatchesSelector' on 'Element': '[object HTMLBodyElement]' is not a valid selector.
在Element元素上執行webkitMatchesSelector方法失敗:[object HTMLBodyElement]不是合理參數
原因:Element.matchesSelector方法只接收CSS選擇符為參數,跟querySelector傳入的參數一致
解決辦法:改變參數
9、XXX call super constructor in derived class before accessing 'this' or returning from derived constructor.
使用了繼承的class類在使用前沒有調用super導入
原因:使用class繼承時,必須在constructor函數中使用super
解決辦法:在contructor中調用super()
