Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么object.eval()可以工作,方括号返回未定义?_Javascript_Html_Eval - Fatal编程技术网

Javascript 为什么object.eval()可以工作,方括号返回未定义?

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]

我试图编写一个脚本,从表的第一列获取方法(以字符串的形式),并在每行的第三列中显示所述方法的输出。例如,html表的第1行第1列包含.getFullYear(),因此在第3列中,我想立即运行(我的日期对象)。getFullYear()。在下一行中,我将运行now.getMonth()等等

当我运行eval(“now.+method”)时,它会毫无问题地运行,但我试图避免使用eval()。当我现在运行[method]时,输出返回undefined。为什么eval()可以工作,但现在[method]返回了不同的结果

```JavaScript`

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]();