如何识别字符串是否为对象?

时间:2014-10-23 15:05:42

标签: javascript

我必须创建一个程序,用户将使用prompt()输入对象的名称,之后将列出该对象的所有属性。

我课程中的很多学生都在使用eval(),但我读过使用这种方法并不是一个好主意。

所以我尝试编写更好的代码,但我无法完成它。我最大的问题是当用户写this.object时和写object.object.object时,必须显示第三个对象的属性。

var x = prompt("Object?");
x = x.toLowerCase();

if (x === "window") {
    x = window;
    load_table();
} else if (window[x]) {
    x = window[x];
    load_table();
} else if (x[0] === "t" && x[1] === "h" && x[2] === "i" && x[3] === "s" && x[4] === ".") {
    x = x.split('.');
    x = x[1];
    load_table();
} else {
    document.write("Error Message.");
}

任何提示?

2 个答案:

答案 0 :(得分:4)

尝试这样的事情:

var x = prompt("Object?");
// x = x.toLowerCase(); // not including, what if the object has a capital in its name?
x = x.split('.');
if (x[0] == 'this') {
    x.shift(); // remove this, as it refers to window anyways
}
var theObj = window; // start with the global object
for (var i = 0; i < x.length; i++) {
    theObj = theObj[x[i]];
    if (theObj == undefined) break;
}

变量theObj将包含您的最终值。

答案 1 :(得分:1)

您可能需要带有类型检查器的递归函数。然后,您可能还想编写一个函数来检查窗口对象中是否有一个名为value的对象。

function check(val){
    if(!val) return "No value";
    else if(typeof val === "string"){
        return val;
    } else if(typeof val === "object"){
        var returner = "{";
        for(var i in val){
            returner += i + ": ";
            returner += check(val[i]);
            returner += ",";
        }
        return returner + "}"
    } else {
        return "Not object or string";
    }
}

function tellMe(string){
    if(string.split(".").length >= 2){
        var check = window;
        var split = string.split(".");
        for(var i = 0; i < split.length; i++){
            if(typeof check[string[i]] != "undefined"){
                check = window[string[i]];
            }
        }
        return "The closest value is " + check;
    } else if(typeof window[string] != "undefined"){
        return check(window[string]);
    } else {
        return "Value cannot be found in window object";
    }
}

实施例

var string = "A string";
var object = {"key1":"value1","key2":"value2"};
console.log(tellMe("string"));
console.log(check(string));
console.log(tellMe("object"));
console.log(check(object));