0

我希望我的用户在输入字段中输入一些文本,然后在单击该按钮时单击“评估”按钮,如果可以的话,我会将输入的文本转换为 JavaScript 对象,并将显示它的所有成员(属性和函数)。

例如,如果用户输入"document"或我将分别显示和"window"的所有成员。documentwindow

遍历对象的成员已经完成,但是当用户在输入文本字段中输入一些文本并且我得到的文本比该值被视为字符串时,我当然如何将该文本转换为像"document"todocument"window"to的对象window

4

4 回答 4

3

您可以使用“评估”。 编辑:感谢@Victor 和@Cerbrus 的评论指出这里不需要eval 。您也可以使用window[input].

var input = "document";
var obj = eval(input);
for (var prop in obj) console.log(prop + ": " + obj[prop]);

如果它是另一个对象(即全局对象)的成员,那么您可以使用括号表示法:

var hello = "world";
var variableName = "hello";
console.log(JSON.stringify(window[variableName]));
于 2012-11-21T07:45:03.243 回答
1

建议的解决方案不适用于子属性(例如 window.document.body)。我写了一个小 jsFiddle,它应该适用于大多数情况。它当然缺乏真正的错误检查,但应该是一个不错的起点http://jsfiddle.net/a6A4m/1/

 var showProperties = function(text) {
        var output = '';
        var object = window;

        // if it isn't the global window object
        if (text !== 'window') {
            var parts = text.split('.');

            // Since we're using pop, we need to reverse it first.
            parts = parts.reverse();

            while (parts.length > 0) {
                object = object[parts.pop()];
            }
        }

        $('#content').html(getOutput(object));
    };
于 2012-11-21T08:23:38.893 回答
0

如果你得到这样的输入值

var selector = $('input').val();

那么对象将是

$(selector)
于 2012-11-21T07:48:04.120 回答
0

如果您的字符串是 JSON 格式,或者字符串是 javascript 对象的名称,那么我在这里看到 jQuery.parseJSON 将字符串转换为对象的方法。

var s2o = (new Function("return " +val+";"))();

假设 val 包含来自文本输入的值。

这有点像使用 Function 对象作为“编译器”,这样你就可以返回一个 javascript 对象。

如果用户传入文档,则给出document对象;
如果用户传入{id:1, name:"test"},它会给出该对象。

于 2012-11-21T18:59:42.777 回答