gpt4 book ai didi

javascript - 规避评估

转载 作者:太空宇宙 更新时间:2023-11-04 15:44:29 25 4
gpt4 key购买 nike

我在表中列出了代码,我想访问特定单元格中的代码并运行它。问题是表中的所有值都是字符串,我无法将字符串转换为代码。

function readTable(tableName, rowId, columnName) {
readRecords(tableName, {}, function(records) {
for (var i =0; i < records.length; i++) {
var record = records[i];
if (record.id === rowId) {
if (record[columnName]!==undefined) {
eval(record[columnName]);
}
}
}
});
}

有什么办法可以避免使用 eval 吗?例如,我的一个表格单元格中的文本被解释为(保存表格后)

"setText(\"specialbutton\",\"You got tricked. Be careful next time.\");gameovercounter()"

它运行为

setText("specialbutton","You got tricked. Be careful next time.");gameovercounter()

使用 eval 后。我还没有弄清楚如何在这种情况下避免 eval。

最佳答案

避免 eval 并仍然从文本运行代码的最佳方法是使用:

new Function(strFuncBody)

将您的评估代码替换为:

if (record[columnName]!==undefined) {
// create a function to run
var func = new Function(record[columnName]);
// then call the function...
func();
}

eval() 和 Function() 之间有很大的区别,在本文中的“永远不要使用 eval!”部分中进行了解释:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval .

无论如何,如果您无法完全控制字符串包含的内容,则永远不应该使用 new Function() 或 eval() 将字符串作为代码运行。

关于javascript - 规避评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43657557/

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