gpt4 book ai didi

javascript - 给定一组变量,如何在文字表达式中查找 undefined variable ?

转载 作者:行者123 更新时间:2023-12-03 03:38:44 25 4
gpt4 key购买 nike

目的:查找 undefined variable

假设我们有一组变量:varA、varB、varC

我们知道以下表达式是有效的:

varA + varB - varC

并且以下表达式无效(因为 VARC 不在变量集中):

varA + varB - VARC

我已经让它工作了:

function validate(comma separated variables)
{
the literal expression
return 'PASS'
}

现在我只需运行“validate()”不传入任何参数(是的,javascript支持),如果函数返回'PASS',则意味着文字表达式是有效的。否则就会出错。

在此示例中,该函数不会返回“PASS”,因为“varA + varB - VARC”中有拼写错误,并且 JavaScript 调试器将报告“VARC”。

function validate(varA, varB, varC)
{
varA + varB - VARC
return 'PASS'
}
validate(); //call the function WITHOUT passing in any argument

---------------------到目前为止一切都很好。我可以验证任意表达式! ----------------------------------

但是,如果我使用 javascript 对象作为集合中的变量,则这种方式不起作用。在下面的代码中,返回“PASS”(虽然我期望调试器报告错误)。

function MyClass()
{
this.attr1 = null
this.attr2 = null
}

myClass = new MyClass();

function validate(varA, varB, varC)
{
varA + varB - varC + myClass.attr3
return 'PASS'
}

问题1:如何找到报告“myClass.attr3”未定义的方法?

注意:我无法对表达式进行标记(实际上它更复杂,必须是语法解析器)并通过“取消定义测试”验证每个标记。我必须在表达式级别进行验证。

编辑:

我测试了代码并发现:

varA === undefined
VARC can not be evaluated, exception thrown //the only case that is helping me
myClass.attr1 === null
myClass.attr3 === undefined

最佳答案

the expected result is: validate(...) function throw exception and not returning 'PASS' to the spidermonky engine.

问题中的方法的一个问题是 validate 函数中的代码不会引发异常。

您使用+-运算符,可以将undefined转换为NaN,这是

varA + varB - varC + myClass.attr3

例如

console.log(undefined + void 0 - undefined + void 0); // NaN

如果您希望在表达式包含 undefined 时引发异常,解决方案是重新评估并调整您的代码。 validate() 调用中的表达式当前计算结果为 NaN,而不是异常或 未定义

function myClass() {}

function validate(varA, varB, varC) {
var x = varA + varB - varC + myClass.attr3;

console.assert(!isNaN(x), x, [isNaN(x)]);
return 'PASS'
}

validate()

关于javascript - 给定一组变量,如何在文字表达式中查找 undefined variable ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45727220/

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