NodeJS语法错误:意外的标记'.'。

3

初学Node JS和NPM。以下代码抛出了一个语法错误,但无法确定问题所在。

Node版本:v12.18.3 NPM版本:7.15.1

错误信息:

LayerObj.options?.["displayName"] != undefined
                       ^

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:1053:16)
    at Module._compile (internal/modules/cjs/loader.js:1101:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Applications/MAMP/htdocs/nft-generators/hashlips_art_engine-main/index.js:2:39)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)

代码

const layersSetup = (layersOrder) => {
  const layers = layersOrder.map((layerObj, index) => ({
    id: index,
    elements: getElements(`${layersDir}/${layerObj.name}/`),
    name:
      layerObj.options?.["displayName"] != undefined
        ? layerObj.options?.["displayName"]
        : layerObj.name,
    blend:
      layerObj.options?.["blend"] != undefined
        ? layerObj.options?.["blend"]
        : "source-over",
    opacity:
      layerObj.options?.["opacity"] != undefined
        ? layerObj.options?.["opacity"]
        : 1,
    bypassDNA:
      layerObj.options?.["bypassDNA"] !== undefined
        ? layerObj.options?.["bypassDNA"]
        : false,
  }));
  return layers;
};
1个回答

12

可选链操作符(?. 在 Node.js 14 中新增,但在 Node 12 中不能直接使用

可选链操作符 ?. 与属性访问操作符 . 类似,但不同的是当引用值为 null 或 undefined 时,它会短路并返回 undefined,而不是抛出错误。当与函数调用一起使用时,如果该函数不存在,则返回 undefined。

建议使用更新版本的 Node 或编写 Node 12 兼容的代码。

Node.js v14 中的新 JavaScript 特性介绍了一些新的语言构造。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接