提问人:Spencer 提问时间:6/10/2023 最后编辑:Spencer 更新时间:6/10/2023 访问量:70
为什么 “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?
问:
编辑:一个 - 相似的角色是罪魁祸首。
我有一个脚本,我正在粘贴到 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 - 1
4
args.length - 1
args.length
args
这是我可以将其简化为但仍然抛出错误的最小代码*:
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 tokenx.length
let x = [1, 2];
x.length
x.length - 1
它给出的错误也不是您在这种情况下所期望的。
如果我在没有声明 x 的情况下运行,输出是“Uncaught ReferenceError: x is not defined” 如果我运行它之后,输出是“Uncaught TypeError: Cannot read properties of undefined”
如果我将 x 设置为没有 length 属性的东西,结果是x.length - 1
let x;
NaN
因此,这不仅仅是控制台的变量值不正确或没有值。
这是我的代码有问题吗?还是我在 Edge 上遇到了错误?
答:
原来我用错了“-”号。我使用的是“-”(U-2212“减号”) 感谢塞巴斯蒂安·西蒙(Sebastian Simon)建议我检查一下。
评论
typeof argments === 'undefined'
-
−