假设回复为{"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替换,如其所使用的注释中所示。
答案 0 :(得分:0)
使用表达式jsonparsed.key
,您需要"key"
对象上名为jsonparsed
的属性。
要检索名称为var值的键,可以使用类似数组的表示法:
throw ("Error says:"+jsonparsed[key]);
或使用eval函数:
throw ("Error says:"+eval("jsonparsed."+key));
答案 1 :(得分: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]);
}