这个未指明的错误来自哪里?

时间:2014-02-14 16:08:56

标签: javascript jquery winjs windows-applications

我正在尝试格式化任何类型的变量以实现某种toString()方法。

它适用于非常复杂的对象和数组,处理循环引用,但是当我尝试在jQuery对象上调用它时:format($("body")),为了在大型复杂对象上测试它,我得到了这个错误:

Unhandled exception at line 330, column 21 in ms-appx://8b94d51c-586e-4f3f-bb9c-fa75d62508cd/js/default.js

0x80004005 - Erreur d’exécution JavaScript: Erreur non spécifiée.
0x80004005 - JavaScript Run-time Error: Unspecified error. // I translated it for you

以下是我的代码(// ERROR!行旁边有330条评论):

function format(arg, parents, indent) {
    var maxParent = 25;
    if (parents === undefined) {
        parents = [];
    }

    if (indent === undefined) {
        indent = 1;
    }

    if (contains(parents, arg)) {
        return '<span class="brackets">[Circular]</span>';
    }

    if (typeof arg === 'string' && parents.length > 0) {
        return '"' + htmlEntities(arg) + '"';
    } else if (Array.isArray(arg)) {
        parents.push(arg);

        if (parents.length >= maxParent) {
            return '<span class="brackets">[Array]</span>';
        }

        var ret = "[ ";
        for (var i = 0, len = arg.length; i < len; i++) {
            if (i !== 0) {
                ret += ", ";
            }

            ret += "<br>";
            ret += addIndent(indent);

            ret += format(arg[i], parents, indent + 1);
        }

        ret += "<br>";
        ret += addIndent(indent - 1);
        ret += " ]";

        return ret;
    } else if (arg === null) {
        return '<span class="void">null</span>';
    } else if (arg === void 0) {
        return '<span class="void">undefined</span>';
    } else if (typeof arg === 'number' && (isNaN(arg) || !isFinite(arg))) {
        return '<span class="void">' + arg.toString() + '</span>';
    } else if (typeof arg === 'object' && arg !== null) {
        if (parents.length >= maxParent) {
            return '<span class="brackets">[Object]</span>';
        } else {
            parents.push(arg);
        }

        var ret = "{";

        var first = true;

        for (var key in arg) {
            if (!first) {
                ret += ", ";
            }
            else {
                first = false;
            }

            ret += "<br>";
            ret += addIndent(indent);
            ret += key;
            ret += ": ";

            if (typeof arg[key] === 'function') {
                ret += '<span class="brackets">[Function]</span>';
            } else {
                ret += format(arg[key], parents, indent + 1); // ERROR!
            }
        }

        ret += "<br>";
        ret += addIndent(indent - 1);
        ret += "}";

        remove(parents, arg);

        return ret;
    }

    return arg;
}

您是否知道发生此错误的原因?

我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

在我调用格式函数时,我可以认为arg [key]为空。同步if语句,使其仅在arg [key]不为空后执行。