Javascript 使用括号中字符串的属性的属性?
假设我有一个复杂的对象,它的属性是有属性的Javascript 使用括号中字符串的属性的属性?,javascript,Javascript,假设我有一个复杂的对象,它的属性是有属性的 var x = {}; x.A.B = 'Hello'; x.A.C = 'World!'; x.D.E = 100; x.D.F = 2.5; 有什么东西我可以放在一组方括号里,以便取回这些属性吗?一个简单的测试表明x['A.B']不会返回'Hello'。是否有任何语法可以执行此操作?如果您不想迭代,可以在严格模式下使用eval相当安全地执行此操作我不建议这样做。但这是一种方法 var x = {A:{}}; x.A.B = 'Hello'; v
var x = {};
x.A.B = 'Hello';
x.A.C = 'World!';
x.D.E = 100;
x.D.F = 2.5;
有什么东西我可以放在一组方括号里,以便取回这些属性吗?一个简单的测试表明
x['A.B']
不会返回'Hello'
。是否有任何语法可以执行此操作?如果您不想迭代,可以在严格模式下使用eval
相当安全地执行此操作我不建议这样做。但这是一种方法
var x = {A:{}};
x.A.B = 'Hello';
var propertyPath = 'A.B';
var value = eval('"use strict"; x.' + propertyPath);
console.log(value);
另一种更可重用的方法是创建一个新的函数对象,而不是使用
eval
function propertyValue(obj, propertyPath) {
'use strict';
return (new Function('obj', 'return obj.' + propertyPath))(obj);
}
var value = propertyValue(x, 'A.B');
它实际上是一样的,但有一个明确的定义。是的,语法是使用更多的括号或点符号。x['a']['B']应该做这个技巧。你应该使用x['a']['B']或x.a.B。情况是,我可能不知道我需要深入多少层。我希望有一种非迭代的方法来实现这一点。@CoreyOgburn您可能希望创建一种方法来处理您的情况的随机性。e、 g.:
deeppropertyexists('a.b.c',obj)
只需迭代周期数,并检查每次迭代是否未定义属性。(a,a.b,a.b.c)我不认为eval像人们试图说的那样邪恶。我考虑的情况是,对于内部工作应用程序,propertyPath
来自HTML控件上的属性,这样控件就可以指示它们的值将进入哪些属性(因为我们没有使用任何数据绑定库)。它们可能是属性的属性。我用一个更有用的函数更新了我的问题,您可以使用、中的信息和上面的答案。我现在有了保留类型的getter和setter函数。