gpt4 book ai didi

javascript eval 上下文不包含 chrome 中的参数

转载 作者:行者123 更新时间:2023-11-28 02:15:37 25 4
gpt4 key购买 nike

我今天遇到了一个奇怪的错误。

当我在 chrome 中调用以下函数时,我得到:

var t = function(i){console.log(i);console.log(eval("i"));};

t("123");

//the result in chrome

123

undefined

但是上面的代码在firefox中调用,结果和我想的一样:第二条日志语句和第一条一样。

在我看来,eval语句将使用匿名函数的上下文作为其运行时上下文,其中包含参数。

我没有找到任何涉及评估上下文和参数的 Material 。

谁能告诉我为什么?

<小时/>

实际上,我使用 tempo.js 来渲染 html,并出现了与上面列出的类似的问题。

源代码在这里:

    _replaceVariables: function (renderer, _tempo, i, str) {
return str.replace(this.varRegex, function (match, variable, args) {
try {
...

if (variable === '.') {
val = eval('i');
} else if (utils.typeOf(i) === 'array') {
val = eval('i' + variable);
} else {
val = eval('i.' + variable);
}
.....
} catch (err) {
console.log(err);
}

return '';
});
},

在chrome中运行时,eval语句出现如下错误:

TypeError: Cannot convert null to object

我不明白为什么会发生这种情况,所以我尝试了一开始的代码。

最佳答案

console 函数的 Chrome 控制台实现涉及一些异步行为,这些行为会导致像您所发现的奇怪问题。

也就是说,在您的特定情况下,我的 Chrome 记录了两次“123”。我发现使用一些独特的标识文本来增强调试输出通常是一个非常好的主意:

var t = function(i){console.log("param is " + i);console.log("eval result is " + eval("i"));};

Chrome 控制台输出会折叠重复的行,并在它们前面加上一个小圆圈计数器:


(来源:gutfullofbeer.net)

“123”之前的小“2”表示它被记录了两次。

关于javascript eval 上下文不包含 chrome 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445085/

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