Parsing error: The keyword 'class' is reserved

Parsing error: The keyword 'class' is reserved

我有一个 class 对象,我认为它昨晚在工作。但是现在我尝试测试我的 set Hash 方法,所以我这样做: blah = new HashTable;它说 HashTable 没有定义。

我有另一个文件没有链接到这里,它的所有变量也显示为未定义(在控制台中)。我发誓昨晚我得到了这个工作,所以我很生气。

我收到一个错误,也许我之前没有注意到,但它说

ERROR: 解析错误: 关键字 'class' 被保留 class HashTable

JSLint(2) 预期 标识符 而看到 'class'。 停止。 (扫描了 4%)。

我做错了什么?有人请帮助。

我的愿望是能够在控制台中测试我的 javascript 代码以确保一切正常。我尝试了 google chrome 的代码片段,但它有错误。我尝试了 codepen,它是一个沙箱,所以它在控制台中无法正常工作,现在我正在尝试使用括号,它也不让我在控制台中进行测试。变得很沮丧。

class HashTable {
    constructor(size){
        this.keyMap = new Array(size);
    }

function _hash(key) {
    let total = 0;
    let prime = 31
    for (let i = 0; i < Math.min(key.length, 100); i++) {
        let char = key[i];
        let value = char.charCodeAt(0) - 96;
        total  = (total * prime + value) % this.keyMap;
    }
    return total;
   }

    function set(key){
        hashNumber = this._hash(key);
        return hashNumber;
    }

}

-

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src = "app.js"></script>
    <script src = "hash.js"></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Please work</h1>

</body>
</html>

我不知道它是否与您指出的错误具体相关,但您的 HashTable class 中存在语法错误。您不使用 functionclass 构造中定义 class 的方法。所以:

class HashTable {
    constructor(size){
        this.keyMap = new Array(size);
    }

    _hash(key) {
//  ^--------------------------------------- no `function` here
        let total = 0;
        let prime = 31
        for (let i = 0; i < Math.min(key.length, 100); i++) {
            let char = key[i];
            let value = char.charCodeAt(0) - 96;
            total  = (total * prime + value) % this.keyMap;
        }
        return total;
    }

    set(key) {
//  ^--------------------------------------- nor here
        hashNumber = this._hash(key);
        return hashNumber;
    }
}

其他说明:

  • 几乎没有任何理由使用 new Array

  • 您正在使用分配给 this.keyMap 的数组作为表达式 total = (total * prime + value) % this.keyMap; 中的数字,这没有任何意义。

  • 我建议计算 for 循环的上限 一次 ,然后重复使用该值,而不是每次都计算它循环迭代。

不完全正确@T.J。 Crowder:ESLint 7.11.0node 14.14(目前最新版本)会抛出这个错误。

尽管 ESLintJSLint 更受欢迎(如前所述 here), it seems babel-eslint is preferred (as is mentioned with the how to here),但它会解决这个问题。