Javascript 为什么object.eval()可以工作,方括号返回未定义?
我试图编写一个脚本,从表的第一列获取方法(以字符串的形式),并在每行的第三列中显示所述方法的输出。例如,html表的第1行第1列包含.getFullYear(),因此在第3列中,我想立即运行(我的日期对象)。getFullYear()。在下一行中,我将运行now.getMonth()等等 当我运行eval(“now.+method”)时,它会毫无问题地运行,但我试图避免使用eval()。当我现在运行[method]时,输出返回undefined。为什么eval()可以工作,但现在[method]返回了不同的结果 ```JavaScript`Javascript 为什么object.eval()可以工作,方括号返回未定义?,javascript,html,eval,Javascript,Html,Eval,我试图编写一个脚本,从表的第一列获取方法(以字符串的形式),并在每行的第三列中显示所述方法的输出。例如,html表的第1行第1列包含.getFullYear(),因此在第3列中,我想立即运行(我的日期对象)。getFullYear()。在下一行中,我将运行now.getMonth()等等 当我运行eval(“now.+method”)时,它会毫无问题地运行,但我试图避免使用eval()。当我现在运行[method]时,输出返回undefined。为什么eval()可以工作,但现在[method]
const now = new Date();
//gets the full table data
const methodTable = document.querySelector("#methods-table");
function tableTimeData(table) {
const tableLength = table.rows.length;
for (let i = 1; i < tableLength; i++) { //iterate through each table row, skipping the header
let row = table.rows[i];
let method = row.cells[0].innerText;
row.cells[2].innerText = eval("now." + method);
//OR
method = method.substr(1);
row.cells[2].innerText = now[method];
}
}
tableTimeData(methodTable);
我希望eval(“now.+method”)的结果与now[method]相同。如果
method
是.getFullYear()
,那么
method = method.slice(1, -2);
row.cells[2].innerText = now[method]();
应该有用。你忘了从
方法中删除(
)方法的确切值是多少(在你出于某种原因删除第一个字符之前)不。现在。0
与现在[“0”]
不同,现在。调用()
与现在[“调用()”]
不同。方法的第一个值是.getFullYear()。我删除了第一个字符,使其不再包含“.”,因为方括号中不需要“.”。如下所示,我还需要删除结尾处的“()”并将它们添加到方括号之后,以便代码正确运行。我删除了第一个字符,这样它就不再包含“.”,因为如果是这样的话,它们在方括号中是不必要的,不会eval(“now.”方法)代码>变为eval(“now..getFullYear()”
因为您是在eval
@主控正确后才删除它的,所以我将该代码放回以进行比较,但是第一次运行它时,我没有将“.”放在“now”的末尾。因此它应该是eval(“now”+方法);要正确运行,我可以通过删除“.”使其与方括号一起运行。以及年底的“()”。getFullYear。现在[方法]();是我使用的解决方案,使用method=getfullyear我们不知道OP是如何将方法
存储在表中的(包括它是否包含
和括号)。但它们肯定缺少了要调用的括号now[method]
,您已经包括了这些括号。非常感谢。我的印象是,参数的“()”必须包含在方括号内,就像它与.eval()一样。在所有的代码之外,所有代码都按照预期运行。@埃里克通过点击答案上的“检查”按钮来接受答案。
method = method.slice(1, -2);
row.cells[2].innerText = now[method]();