2 回答

TA貢獻1804條經驗 獲得超7個贊
訪問對象上不存在的屬性是完全合法的。出于類似的原因,以下不會引發錯誤:
const obj = {
prop1: 'val1'
};
console.log(obj.prop2);
如果對象上不存在某個屬性,但訪問了該屬性,則會導致undefined
返回,但不會出現運行時錯誤。
JavaScript 無法區分您是在嘗試訪問可能存在的屬性,還是在輸入錯誤。
如果你想避免這些類型的錯誤(畢竟它們并不少見),請考慮使用像Typescript這樣的強類型的東西,它可以將這些煩人的調試運行時錯誤變成易于修復的編譯時錯誤. (我發現 TS 對于重要的項目來說是必不可少的,它可以節省很多調試時間。)另一種選擇是使用具有智能感知自動完成功能的 IDE(如 VSCode),這使得這類錯誤變得更加困難。

TA貢獻1856條經驗 獲得超11個贊
JavaScript 是否可以接受長度?
是的。如果你試圖訪問一個不存在的屬性,JavaScript 將返回值undefined:
var obj = {length: 1};
console.log(obj.lenght)
console.log(obj.lenght > 2)
但是,沒有針對此錯誤或語法錯誤的通知。我花了很長時間調試。我想知道這怎么會發生?
這不是語法錯誤。語法錯誤是指您的代碼如此“損壞”以至于解析器無法將其作為有效的 JavaScript 程序處理。屬性名稱中的拼寫錯誤不是語法錯誤(解析器應該如何知道一個詞是否正確?對它來說,它只是一個字母序列。)
拼寫錯誤是否會導致運行時錯誤取決于上下文。訪問不存在的屬性會返回,undefined但在您的情況下這不是問題,因為undefined與數字進行比較是有效的操作。
另一方面,如果您嘗試訪問該undefined值的另一個屬性,您會得到一個錯誤:
var obj = {};
console.log(obj.foo.bar);
由于這些容易遺漏的錯誤,因此出現了 Typescript 甚至 eslint 之類的工具。他們試圖在開發時發現問題。
添加回答
舉報