簡體   English   中英

未捕獲的TypeError:無法讀取未定義的屬性“長度”

[英]Uncaught TypeError: Cannot read property 'length' of undefined

我有一個插件,可以訪問許多元素的length屬性。 但是,javascript控制台指向jquery.min.js的第12行。

如何回溯以查找插件中的違規行?

如果您使用縮小的腳本,任何調試器(如完全最好的firebug)將向您顯示相同的有問題的行,並且此信息是無用的(縮小的腳本難以閱讀和理解,並且它們寫在一行中)。

幾乎沒有辦法解決這樣的問題:

  1. 正如我之前所說的那樣:為了開發使用而不是縮小腳本,調試器將向您顯示意味着什么的行,如果您很幸運,您可以找到非常有用的開發人員評論。
  2. 如果你找不到完整版本的腳本,可以使用unminifier,如下所示: http ://jsbeautifier.org/(粘貼縮小的腳本並點擊下面的按鈕)。 添加到項目的已發布腳本並再次運行無效功能。 調試器將再次顯示該行,但這次您將看到一條真正的邏輯行,您可以在大多數情況下了解問題所在。
  3. 調試器將顯示哪個腳本引發問題。 檢查此腳本是否有任何新版本。 我曾經遇到過同樣的問題,找到了縮小腳本的行,插件的名稱(版權所有上面幾行),然后發現有新版本可用。 審核了更改日志,並且:“ 在整個代碼中為潛在的未知屬性值添加了多個'健全性檢查' ” - headshot :)更新了腳本,從現在開始一切都很好,無需特殊調試花費數小時。
  4. 谷歌你的錯誤與腳本名稱 - 它幫了我很多次..可能你做了,但也許你沒有嘗試語音標記“” - 谷歌將返回文本中的確切短語頁面。

如何回溯以查找插件中的違規行?

firebug是調試這些錯誤的好方法。

替代文字
(來源: getfirebug.com

如果您使用Chrome,可以轉到"View > Developer > Developer Tools"使用內置的開發人員工具(我更喜歡Firebug)。 控制台中的錯誤通常會在它之前有一個小的向右箭頭,點擊它時會顯示有關錯誤的更多詳細信息。

Javascript錯誤不太可能來自庫,而是引用該庫中的方法/函數的代碼,因此您希望查看控制台右側列出的所有問題行並選擇對應的行您編寫的代碼將是您的問題所在。

通過查看jQuery的源代碼,您不太可能找出問題所在。 問題出在您的代碼中。 只是jQuery不能使用傳遞給它的未定義變量。

我經常發現這些模糊的框架錯誤是AJAX請求錯誤的結果。 如果是這種情況,您的Developer Tool Of Choice很可能包含一個Network選項卡,這可能會突出顯示錯誤的真正來源。

如果您使用jQuery(或任何JavaScript框架)來處理AJAX請求的結果,則格式化和處理錯誤都是額外的且經常被忽略的步驟。

除了調試器/ firebug之外,跟蹤它的一種簡單方法(如果你有一個沙盒版本的網站)是單獨注釋掉每個插件並檢查錯誤是否消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM