我在表中列出了代码,我想访问某个单元格中的代码并运行它。问题是表中的所有值都是字符串,我无法将字符串转换为代码。
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。
答案 0 :(得分:1)
避免使用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。
无论如何,如果您无法完全控制字符串包含的内容,则不应使用新的Function()或eval()将字符串作为代码运行。