javascript - 为什么 object.eval() 有效,方括号返回未定义?

标签 javascript html eval

我正在尝试编写一个脚本,该脚本从表的第一列中获取方法(以字符串的形式),并在每行的第三列中显示该方法的输出。前任。 html 表的第 1 行第 1 列包含 .getFullYear(),因此在第 3 列中我想运行(我的 Date 对象)now.getFullYear()。在下一行中,我将运行 now.getMonth() 等。

当我运行 eval("now."+method) 时,它运行没有问题,但我试图避免使用 eval()。当我运行 now[method] 时,输出返回未定义。为什么 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);

HTML

   <table class="table" id="methods-table">
                <tr>
                    <th>Method Name</th>
                    <th>Method Description</th>
                    <th>Method Output</th>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getFullYear()</td>
                    <td>Returns the full 4 digit year.</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getMonth()</td>
                    <td>Returns the month as an integer (0-11).</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getDay()</td>
                    <td>Returns the day of the week as an integer (0-6).</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getHours()</td>
                    <td>Returns the hour as of creation.</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getMinutes()</td>
                    <td>Returns minute as of creation</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getSeconds()</td>
                    <td>Returns second as of creation</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.getTime()</td>
                    <td>Returns the number of miliseconds passed since Jan. 1 1970. Used as a baseline to compare 2 dates.</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.toDateString()</td>
                    <td>Returns a shortened date with day, month, date and year with day and month as names rather than integers.</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.toTimeString()</td>
                    <td>Returns a shortened time of day with hour, minute second and time zone (always Greenwhich Mean Time as a standard).</td>
                    <td></td>
                </tr>
                <tr>
                    <td class="text-info font-weight-bold">.toLocaleString()</td>
                    <td>Returns a shortened time of day with hour, minute second and time zone (as your local time zone).</td>
                    <td></td>
                </tr>
            </table>

我希望 eval("now."+method) 的结果与 now[method] 相同。

最佳答案

如果方法.getFullYear(),那么

method = method.slice(1, -2);
row.cells[2].innerText = now[method]();

应该可以工作。您忘记从 method 中删除 ()

关于javascript - 为什么 object.eval() 有效,方括号返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683152/

相关文章:

html - 绝对定位的容器不会扩展宽度以适应 flex 盒内容

wordpress - wp_editor 中的 TinyMCE 编辑器正在删除我的 html 标签

java - 用其他东西替换 eval

javascript - 帮助解决 jQuery 函数过早执行的问题

javascript - 页面滚动时,圆形鼠标跟随正在移动

javascript - 不允许使用 Codeigniter/PHP(405 错误)在 jQuery Blueimp FileUpload 上删除方法?

html - :after element unexpected height behavior

bash - 为什么 bash eval 在后台命令失败时返回零?

tree - LISP 编程 - 计算树节点的函数

javascript - 不断循环一个javascript数组并将结果显示到div?