let foo = {
bar: 'Hello World',
baz: 'How are you doing?',
last: 'Quite alright'
};
for (let prop in foo.getOwnPropertyNames()) {
console.log(foo[prop]);
}
点和括号表示法也可以像嵌套对象一样工作:
let foo = {
bar: {
baz: 'Hello World'
}
};
foo.bar.baz;
foo['bar']['baz'];
foo.bar['baz'];
foo['bar'].baz;
Object destructuring
我们还可以将对象解构视为访问对象中属性的一种方法,但如下所示:
let foo = {
bar: 'Hello World',
baz: 'How are you doing?',
last: 'Quite alright'
};
let prop = 'last';
let { bar, baz, [prop]: customName } = foo;
// bar = 'Hello World'
// baz = 'How are you doing?'
// customName = 'Quite alright'
var foo = { pName1 : 1, pName2 : [1, {foo : bar }, 3] , ...}
var name = "pName"
var num = 1;
foo[name + num]; // 1
// --
var a = 2;
var b = 1;
var c = "foo";
foo[name + a][b][c]; // bar
var obj = {method:function(p1,p2,p3){console.log("method:",arguments)}}
var str = "method('p1', 'p2', 'p3');"
var match = str.match(/^\s*(\S+)\((.*)\);\s*$/);
var func = match[1]
var parameters = match[2].split(',');
for(var i = 0; i < parameters.length; ++i) {
// clean up param begninning
parameters[i] = parameters[i].replace(/^\s*['"]?/,'');
// clean up param end
parameters[i] = parameters[i].replace(/['"]?\s*$/,'');
}
obj[func](parameters); // sends parameters as array
obj[func].apply(this, parameters); // sends parameters as individual values
resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// or even use array indexes
// (someObject has been defined in the question)
resolve("part.0.size", someObject)
// returns null when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
const something = { bar: "Foobar!" };
const foo = 'bar';
// something.foo; -- not correct way at it is expecting foo as proprty in something={ foo: "value"};
// correct way is something[foo]
alert( something[foo])
11 回答
更新
我已在下面考虑并商定了意见 . Eval应该避免 .
使用
obj[variable]
可以轻松地访问对象中的根属性,但是获取嵌套会使事情变得复杂 . 不写已编写的代码我建议使用lodash.get
.例
Lodash get可以用于不同的方式,这里是链接到文档lodash.get
下面是一个ES6示例,说明如何使用通过连接两个字符串动态生成的属性名来访问对象的属性 .
这被称为computed property names
您可以通过几种不同的方式实现这一目标 .
括号表示法特别强大,因为它允许您根据变量访问属性:
这可以扩展为循环对象的每个属性 . 由于更新的JavaScript结构,例如......的......,这似乎是多余的,但有助于说明一个用例:
点和括号表示法也可以像嵌套对象一样工作:
Object destructuring
我们还可以将对象解构视为访问对象中属性的一种方法,但如下所示:
你应该使用
JSON.parse
,看看https://www.w3schools.com/js/js_json_parse.asp在javascript中我们可以访问:
点符号 -
foo.bar
方括号 -
foo[someVar]
或foo["string"]
但只有第二种情况允许动态访问属性:
你可以使用Lodash get这样做
有two ways to access properties的对象:
点表示法:
something.bar
括号表示法:
something['bar']
括号之间的值可以是任何表达式 . 因此,如果属性名称存储在变量中,则必须使用括号表示法:
当你必须将参数传递给这个函数时,它会变得很有趣 .
Code jsfiddle
这是我的解决方案:
用法示例:
每当您需要动态访问属性时,您必须使用方括号来访问属性而不是"."运算符
Syntax: object[propery}