Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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:Replace Eval()和对象长度未定义问题_Javascript_Eval - Fatal编程技术网

Javascript:Replace Eval()和对象长度未定义问题

Javascript:Replace Eval()和对象长度未定义问题,javascript,eval,Javascript,Eval,下面是我的精简函数,用于在浏览器dom结构中递归 (function () { function displaydom (child, parent) { if (parent) {parent = parent+".";}; // if there is no parent then child is the parent var jsns = eval(parent+child); // Join parent + child and eval

下面是我的精简函数,用于在浏览器dom结构中递归

(function () {
    function displaydom (child, parent) {
        if (parent) {parent = parent+".";}; // if there is no parent then child is the parent

        var jsns = eval(parent+child); // Join parent + child and eval

        for (var i in jsns){ // loop through dom object's attributes
            if (typeof jsns[i] == "object") { // if attribute is an object then recurse through
                // display output here
                displaydom (String(i) /** next child **/, parent+child);
            };
        };
    };
    displaydom ('self', '');
})();
有几个问题——可能很简单——我还没能(在Chrome中)开始工作:

  • 需要删除eval()
  • 我想将for循环更改为for(vari=0,len=jsns.length;I因为它更快,但我一直在获取JSN“0”或“未定义”的长度
  • 注意:除非你想让你的浏览器崩溃,否则不要尝试按原样运行代码

    使用

    至于你的第二个问题

    1. `parent`是一个空字符串。 2.字符串没有“self”属性 3.因此,``.self`是`未定义的` 4. `undefined`没有属性,因此不能有length属性
    …不能在非数组(或类似数组的对象)的对象上使用传统的for循环,大多数对象都不是。

    要删除eval,可以使用方括号,如David所说

    var jsns = parent;
    if(parent) { 
        jsns = parent[child]; 
    }
    

    您不能更改循环,这是因为您不能按照您建议的方式迭代对象的属性。对象属性只能通过名称访问,它们没有数字索引。实现这一点的唯一方法是您当前使用的for-in循环。

    self=window(即,我正在迭代dom结构)。我使用self,因为它位于iframe中。另外,顶部的“if”语句补偿了第一个空的父级。好吧,我理解-然后我猜问题是递归调用中来自parent+child的父级是字符串-如何将字符串转换为对象引用?
    var jsns = parent;
    if(parent) { 
        jsns = parent[child]; 
    }