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 中存在语法错误。您不使用 function
在 class
构造中定义 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.0
和 node 14.14
(目前最新版本)会抛出这个错误。
尽管 ESLint
比 JSLint
更受欢迎(如前所述 here), it seems babel-eslint
is preferred (as is mentioned with the how to here),但它会解决这个问题。
我有一个 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 中存在语法错误。您不使用 function
在 class
构造中定义 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.0
和 node 14.14
(目前最新版本)会抛出这个错误。
尽管 ESLint
比 JSLint
更受欢迎(如前所述 here), it seems babel-eslint
is preferred (as is mentioned with the how to here),但它会解决这个问题。