无法获得密钥定义

时间:2013-08-26 08:43:45

标签: javascript

假设回复为{"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
    }  

我收到此提醒:

  

错误表示值未定义

为什么这样,因为密钥似乎被定义为可以确定比较条件。

我无法抛出或发出警报信息。但是,如果密钥被errmsg或msg替换,如其所使用的注释中所示。

2 个答案:

答案 0 :(得分:0)

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

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

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

或使用eval函数:

throw ("Error says:"+eval("jsonparsed."+key));

答案 1 :(得分:0)

好吧,jsonparsed没有属性key,是吗?正如您所说,它有errmsgmsg。因此jsonparsed.keyundefined并不奇怪。

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

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]);
}