Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让@babel/parser将“undefined”识别为特殊标记?_Javascript_Babeljs_Abstract Syntax Tree - Fatal编程技术网

Javascript 如何让@babel/parser将“undefined”识别为特殊标记?

Javascript 如何让@babel/parser将“undefined”识别为特殊标记?,javascript,babeljs,abstract-syntax-tree,Javascript,Babeljs,Abstract Syntax Tree,我正在做一个项目,该项目涉及检查@babel/parser提供的AST,在某种并非非常罕见的情况下,它的行为并不像我预期的那样。这行Javascript: const var1=未定义 使用此命令处理时: babelParser.parsedata{ 插件:[`jsx`、`classProperties`], sourceType:`Unambigular`, }; 转换到此子树中: { "type": "VariableDeclarator", // expected "start":

我正在做一个项目,该项目涉及检查@babel/parser提供的AST,在某种并非非常罕见的情况下,它的行为并不像我预期的那样。这行Javascript:

const var1=未定义

使用此命令处理时:

babelParser.parsedata{ 插件:[`jsx`、`classProperties`], sourceType:`Unambigular`, }; 转换到此子树中:

{
  "type": "VariableDeclarator", // expected
  "start": 240,
  "end": 256,
  "loc": {
    "start": {
      "line": 17,
      "column": 4
    },
    "end": {
      "line": 17,
      "column": 20
    }
  },
  "id": {
    "type": "Identifier", // also expected
    "start": 240,
    "end": 244,
    "loc": {
      "start": {
        "line": 17,
        "column": 4
      },
      "end": {
        "line": 17,
        "column": 8
      },
      "identifierName": "var1"
    },
    "name": "var1"
  },
  "init": {
    "type": "Identifier", // dang, really?
    "start": 247,
    "end": 256,
    "loc": {
      "start": {
        "line": 17,
        "column": 11
      },
      "end": {
        "line": 17,
        "column": 20
      },
      "identifierName": "undefined"
    },
    "name": "undefined"
  }
}
为什么babel解析器将undefined视为变量而不是UndefinedLiteral?我的意思是,除此之外,根据《圣经》的说法,未定义的文字似乎不是一件事

是否有方法更改此初始值节点的类型?或者我必须在代码中添加一个特殊的大小写来查找值为undefined的标识符吗?

您不能这样做,因为undefined在JS语法中不是一个特殊的标记。这样做是完全正确的

var undefined = 4;
console.log(undefined); // logs 4

因此,您需要检查一个名为undefined的标识符,如果您想小心,还需要分析变量的作用域,以查看它实际上是全局未定义绑定,还是可能具有其他值的局部绑定。

噢,哇,我实际上不知道这一点。非常有趣,谢谢,关于检查当前范围的观点。