0

假设响应是{"errmsg":"Error_BB"}{"msg":"I am BB"}

var jsonparsed = JSON.parse(response);// OK, It works

var key = Object.getOwnPropertyNames(jsonparsed);// key can be msg or errmsg, OK, It works

if("errmsg" == key)
    {
        throw ("Error says:"+jsonparsed.key); //It cannot work but if jsonparsed.errmsg, it works 
    }
else
    {
        alert("Data says:"+jsonparsed.key); //It cannot work but if  jsonparsed. msg, it works
    }  

我收到此警报:

该错误表示该值未定义

为什么呢,既然key好像定义为比较条件就可以确定了。

我无法抛出或产生警报消息。但是,如果 key 被替换为 errmsg 或 msg ,如注释中所示,它可以工作。

4

2 回答 2

0

使用表达式jsonparsed.key,您要求"key"jsonparsed对象上命名的属性。

要检索名称为 var 值的键,可以使用类似数组的表示法:

throw ("Error says:"+jsonparsed[key]);

或使用 eval 函数:

throw ("Error says:"+eval("jsonparsed."+key));
于 2013-08-26T08:50:48.170 回答
0

好吧,jsonparsed没有财产key,是吗?正如你所说,它要么有errmsg要么。msg所以这并不jsonparsed.key奇怪undefined

如果要访问名称包含在变量中的属性,则必须使用括号表示法

obj[prop]

但还有更多:Object.getOwnPropertyNames返回一个属性名称数组。虽然"errmsg" == key可能由于隐式类型强制而起作用,但您确实想要获取数组的第一个元素:

var key = Object.getOwnPropertyNames(jsonparsed)[0]; // get first element

if("errmsg" === key) {
    throw ("Error says:"+jsonparsed[key]);
}
else {
    alert("Data says:"+jsonparsed[key]);
}
于 2013-08-26T08:51:26.217 回答