我有一个全局javascript对象,它有子成员,我需要通过提供的字符串访问它的成员。该对象看起来像:
var student = {
0 : {
name : "a",
level : 2
}
1 : {
name : "b",
level : 3
}
...
我希望像使用顶级字符串一样访问它:
this["student[0]['name']"]; // returns undefined
window["student[0]['name']"]; // same here
但这仅适用于变量名称:
this["student"]; // returns the student object
window["student"]; // same
这可以吗?或者用
定义成员的正确方法是什么var accesskey = 'student[0]["name"]';
谢谢。
答案 0 :(得分:1)
假设accessKey
的格式已修复且无法更改,您基本上只有两个选择:
自己解析字符串,然后使用每个级别的相关键进行处理。该字符串很容易拆分:
var parts = accessKey.split(/[\[\]"]+/);
(请务必将""
视为parts
中的第一个或最后一个条目。)
使用eval
:
var val = eval(accessKey);
但只有在您完全控制该字符串时才能这样做。切勿在您无法控制的输入上使用eval
,并且即使控制输入也不要使用它。
答案 1 :(得分:0)
我真的不建议尝试使用"student[0]['name']"
形式的密钥来访问某个值,因为这需要eval()
。相反,你可以在表单中有一个键
['student', 0, 'name']
。在此表单中,您可以使用键来访问结构的任何嵌套部分。
您需要一个能够首先将该键解析为嵌套值的函数:
function get_nested_value(key, source) {
var sub = source || window;
for (var i = 0; i < key.length; ++i) {
sub = sub[key[i]];
}
return sub;
}
然后可以获得该值:
var key = ['student', 0, 'name'];
var value = get_nested_value(key);
如果你真的开始严格按照'student[0]["name"]'
格式的字符串使用密钥,那么你必须采用{{3}给出的eval()
方法但是eval()
通常不安全。