为什么 “x[x.length - 1]” 会在 Javascript 控制台中的数组上抛出“Uncaught SyntaxError: invalid or unexpected token”?

Why does "x[x.length - 1]" throw "Uncaught SyntaxError: invalid or unexpected token" on an array in the Javascript console?

提问人:Spencer 提问时间:6/10/2023 最后编辑:Spencer 更新时间:6/10/2023 访问量:70

问:

编辑:一个 - 相似的角色是罪魁祸首。

我有一个脚本,我正在粘贴到 Edge 的开发人员控制台中,该脚本中断了以下内容:

let args;
if (typeof arguments === 'undefined') {
  args = [1, 'January', 2023, 'test', x => console.log(x)];
} else {
  args = arguments;
}
let returnCallback = args[args.length - 1];

最后一行是触发“Uncaught SyntaxError: invalid or unexpected token”的内容。

我可以替换为 ,代码会按照我的预期运行。
我甚至可以替换为 ,并且不会抛出任何错误。
我尝试粘贴除最后一行之外的所有内容,然后按回车键。我确认是定义的。粘贴最后一行仍会引发错误。
args.length - 14args.length - 1args.lengthargs

这是我可以将其简化为但仍然抛出错误的最小代码*:

let x = [1, 2];
x.length - 1;

以下不会引发错误:

let x = [1, 2];
x.length;

当我单独输入行时,它会变得棘手。
首先,我将输入并按回车键。 如果我粘贴并按回车键,我会收到错误。但是如果我输入,它不会给出错误。
(如果我将 x 设置为单元素数组,则将 2 行粘贴在一起时仍然会出错。但是单独粘贴它们总是有效的。它需要 2+ 个元素来粘贴与键入。
let x = [1, 2];x.length - 1;x.length - 1;

我不认为它只是 chrome 兑现,当它在您键入时预览值时。
例如,查看这 3 行的结果,全部粘贴: enter Result: undefined
enter Result: 2
enter


Uncaught SyntaxError:
Invalid or expected token
x.lengthlet x = [1, 2];x.lengthx.length - 1

它给出的错误也不是您在这种情况下所期望的。
如果我在没有声明 x 的情况下运行,输出是“Uncaught ReferenceError: x is not defined” 如果我运行它之后,输出是“Uncaught TypeError: Cannot read properties of undefined”

如果我将 x 设置为没有 length 属性的东西,结果是
x.length - 1let x;NaN

因此,这不仅仅是控制台的变量值不正确或没有值。

这是我的代码有问题吗?还是我在 Edge 上遇到了错误?

JavaScript Microsoft Edge Chromium

评论

1赞 epascarello 6/10/2023
typeof argments === 'undefined'
1赞 epascarello 6/10/2023
我有一种感觉,你需要在这里给我们更多的代码/上下文。
0赞 Spencer 6/10/2023
@epascarello谢谢,我刚刚在问题中解决了这个问题。我仔细检查了我的代码,但该类型不存在。(我在一台工作笔记本电脑上,不允许在堆栈溢出上粘贴,不得不输入出来。
3赞 Sebastian Simon 6/10/2023
确保 是 U+002D 连字符减号,而不是例如 (U+2212 减号)或其他东西。-
1赞 epascarello 6/10/2023
在 IDE 上使用 linter 等工具会指出您的错误。把你的代码放在 eslint.org/play,它会给该字符带来错误。

答:

0赞 Spencer 6/10/2023 #1

原来我用错了“-”号。我使用的是“-”(U-2212“减号”) 感谢塞巴斯蒂安·西蒙(Sebastian Simon)建议我检查一下。