Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用括号中字符串的属性的属性?_Javascript - Fatal编程技术网

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函数。