for (let i = startIndex ?? 0; i < array.length; i++) {
^
SyntaxError: Unexpected token ?
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (C:\Users\admin\AppData\Roaming\nvm\v6.10.0\node_modules\typescript\bin\tsc:2:1)
at Module._compile (module.js:570:32)
遇到的 SyntaxError: Unexpected token ? 错误是因为正在使用的 Node.js 版本不支持空值合并操作符 ??。空值合并操作符 ?? 是一个相对较新的 JavaScript 特性,它是在 ECMAScript 2020 (ES11) 中引入的。如果您的 Node.js 版本低于这个标准支持的版本,那么就会抛出语法错误。
Node.js 版本 6.10.0 不支持空值合并操作符 ??,这就是为什么在尝试运行代码时遇到错误的原因。为了解决这个问题,可以采取
-
升级 Node.js:升级到支持 ES11 及以上版本的 Node.js。目前,建议使用长期支持(LTS)版本的 Node.js,这些版本经过了充分的测试,并且拥有较长的维护周期。
-
使用逻辑或操作符 || 作为替代:如果您不能或不想升级 Node.js,您可以改用逻辑或操作符 ||,这是一个传统的、广泛支持的方法,用于提供默认值。但是请注意,|| 与 ?? 在行为上略有不同。|| 会在其左侧操作数为“假值”(falsy value,如 0, null, undefined, false, NaN, "")时返回右侧操作数,而 ?? 仅在左侧操作数为 null 或 undefined 时返回右侧操作数。因此,如果 startIndex 可能为 0 或其他假值,并且您希望仅在它为 null 或 undefined 时使用默认值,可能需要重构代码逻辑。