Ошибка синтаксического анализа: ключевое слово «класс» зарезервировано - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть объект класса, который, как я думал, работал прошлой ночью.Но теперь я пытаюсь проверить мой метод set Hash, поэтому я делаю: blah = new HashTable;и он говорит, что HashTable не определен.

У меня есть другой файл, который здесь не связан, и все его переменные также отображаются как неопределенные (в консоли).Клянусь, я получил эту работу прошлой ночью, хотя я так раздражен.

Я получаю сообщение об ошибке, которое, возможно, я раньше не замечал, но оно говорит

ОШИБКА : Ошибка синтаксического анализа: ключевое слово 'класс' зарезервировано 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>

1 Ответ

2 голосов
/ 22 сентября 2019

Я не знаю, относится ли это конкретно к ошибкам, которые вы вызвали, или нет, но в вашем классе 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 цикла один раз , а затем повторно использовать это значение, а не вычислять его на каждой итерации цикла.

...