gpt4 book ai didi

javascript - 如何让 @babel/parser 将 'undefined' 识别为特殊标记?

转载 作者:行者123 更新时间:2023-12-03 00:01:14 24 4
gpt4 key购买 nike

我正在开发一个项目,该项目涉及检查 @babel/parser 提供的 AST,在某些(不是 super 罕见)情况下,它的行为并不符合我的预期。这行 JavaScript 代码:

const var1 = undefined;

当通过此命令处理时:

babelParser.parse(data, {
plugins: [ `jsx`, `classProperties` ],
sourceType: `unambiguous`,
});

转换成这个子树:

{
"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 视为变量而不是“UndefineLiteral”? (我的意思是,除此之外,根据 AST spec 看来“UndefineLiteral”似乎不是一个东西)

有没有办法改变这个初值节点的类型?或者我是否必须在代码中添加特殊情况才能查找值为“未定义”的Identifier

最佳答案

不能,因为 undefined 不是 JS 语法中的特殊标记。这是完全有效的

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

因此,您需要检查名为 undefinedIdentifier,如果您想小心,还可以分析变量的范围,看看它是否确实是全局未定义绑定(bind),或可能具有其他值的本地绑定(bind)。

关于javascript - 如何让 @babel/parser 将 'undefined' 识别为特殊标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com