没有通知的 JavaScript 语法错误

我是 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;

};


慕姐8265434
浏览 112回答 2
2回答

三国纷争

访问对象上不存在的属性是完全合法的。出于类似的原因,以下不会引发错误:const obj = {&nbsp; prop1: 'val1'};console.log(obj.prop2);如果对象上不存在某个属性,但访问了该属性,则会导致undefined返回,但不会出现运行时错误。JavaScript 无法区分您是在尝试访问可能存在的属性,还是在输入错误。如果你想避免这些类型的错误(毕竟它们并不少见),请考虑使用像Typescript这样的强类型的东西,它可以将这些烦人的调试运行时错误变成易于修复的编译时错误.&nbsp;(我发现 TS 对于重要的项目来说是必不可少的,它可以节省很多调试时间。)另一种选择是使用具有智能感知自动完成功能的 IDE(如 VSCode),这使得这类错误变得更加困难。

呼唤远方

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 之类的工具。他们试图在开发时发现问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript