解析错误:关键字“类”已保留

时间:2019-09-22 13:56:10

标签: javascript javascript-objects brackets

我有一个昨晚在工作的类对象。但是现在我尝试测试我设置的Hash方法,然后这样做:等等= new HashTable;并说未定义HashTable。

我还有一个未在此处链接的文件,并且其所有变量也都显示为undefined(在控制台中)。我发誓昨天晚上我做了这个工作,所以我很沮丧。

我遇到了一个也许以前没有注意到的错误,但它说

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

JSLint(2) 应该是标识符看到的是“类” 。 停下来(已扫描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>

2 个答案:

答案 0 :(得分:2)

我不知道它是否与您所指出的错误特别相关,但是您的HashTable类中包含语法错误。您无需使用function来定义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循环的上限,然后重用该值,而不是在每次循环迭代时都要计算它。

答案 1 :(得分:0)

@ T.J。并非完全正确拥挤者:ESLint 7.11.0node 14.14(当前为最新版本)将引发此错误。

尽管ESLintJSLint更受青睐(如提到的here),但似乎babel-eslint是受青睐的(如如何here所述),它将解决此问题。