为了账号安全,请及时绑定邮箱和手机立即绑定

没有通知的 JavaScript 语法错误

没有通知的 JavaScript 语法错误

慕姐8265434 2023-03-03 15:07:06
我是 JavaScript 的新手,当我length键入lenght. 但是,没有针对此错误或语法错误的通知。我花了很长时间调试。我想知道这怎么会发生?如果lenghtJavaScript 可以接受?var totalFruit = function(tree) {        let windowStart = 0;    let dict = {};    maxLength = 0;    for (let windowEnd = 0; windowEnd < tree.length; windowEnd++) {         currentFruit = tree[windowEnd];        if (!(currentFruit in dict)) {            dict[currentFruit] = 0;        }        dict[currentFruit] += 1;         while (Object.keys(dict).lenght > 2) {            leftFruit = tree[windowStart];            dict[leftFruit] -= 1;            if (dict[leftFruit] == 0) {                delete dict[leftFruit]            windowStart += 1;            }        }        maxLength = Math.max(maxLength, windowEnd - windowStart + 1);         }    return maxLength;};
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

访问对象上不存在的属性是完全合法的。出于类似的原因,以下不会引发错误:


const obj = {

  prop1: 'val1'

};


console.log(obj.prop2);

如果对象上不存在某个属性,但访问了该属性,则会导致undefined返回,但不会出现运行时错误。

JavaScript 无法区分您是在尝试访问可能存在的属性,还是在输入错误。

如果你想避免这些类型的错误(毕竟它们并不少见),请考虑使用像Typescript这样的强类型的东西,它可以将这些烦人的调试运行时错误变成易于修复的编译时错误. (我发现 TS 对于重要的项目来说是必不可少的,它可以节省很多调试时间。)另一种选择是使用具有智能感知自动完成功能的 IDE(如 VSCode),这使得这类错误变得更加困难。


查看完整回答
反对 回复 2023-03-03
?
呼唤远方

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


查看完整回答
反对 回复 2023-03-03
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信