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 之类的工具。他们试图在开发时发现问题。
添加回答
举报