假设我有一个引用深层 Javascript 对象的字符串,例如:
var string = 'response.basicInfo.gender';
我想构建一个函数来安全地检查该对象是否存在,通过将字符串拆分为.
s 并构建对象,检查每个级别,然后处理对象的值(如果它确实存在)。
var parseHelper = function(response, items) {
for (item in items) {
var parts = String(item).split('.');
for (var i = 0; i < parts.length; ++i) {
// ... etc. build the string
}
}
}
parseHelper(response, {
'basicInfo.gender': function(val){
return (val == 'M') ? 'Male' : (val == 'F') ? 'Female' : val;
},
})
虽然上述函数不完整,但假设我们使用它来构建字符串并检查每个是否存在:
// so let's suppose we build the string:
var builtString = "response['basicInfo']";
// Now we want to check if it exists
if (response['basicInfo']) {
// And if we are fine that it exists, go on to the next item
var builtString = "response['basicInfo']['gender']";
// etc.
}
我构建该函数没有问题,我只是不知道如何评估字符串"response['basicInfo']['gender']"
并将其转换为对对象的实际引用。我唯一的猜测是 eval(),但 eval 是邪恶的......
更新
我知道你可以通过 go 来引用一个全局对象window['blah']
,但是我要引用的这个响应对象不在全局范围内,我要使用this
吗?即使我能做到这一点,我如何用多层引用它?