Javascript 如何让@babel/parser将“undefined”识别为特殊标记?
我正在做一个项目,该项目涉及检查@babel/parser提供的AST,在某种并非非常罕见的情况下,它的行为并不像我预期的那样。这行Javascript: const var1=未定义 使用此命令处理时: babelParser.parsedata{ 插件:[`jsx`、`classProperties`], sourceType:`Unambigular`, }; 转换到此子树中: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":
{
"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的标识符,如果您想小心,还需要分析变量的作用域,以查看它实际上是全局未定义绑定,还是可能具有其他值的局部绑定。噢,哇,我实际上不知道这一点。非常有趣,谢谢,关于检查当前范围的观点。