我正在尝试使用动态名称访问对象的属性。这可能吗?
const something = { bar: "Foobar!" }; const foo = 'bar'; something.foo; // The idea is to access something.bar, getting "Foobar!"
有两种访问对象属性的方法:
something.bar
something['bar']
方括号之间的值可以是任何表达式。因此,如果属性名称存储在变量中,则必须使用方括号表示法:
var something = { bar: 'foo' }; var foo = 'bar'; // both x = something[foo] and something[foo] = x work as expected console.log(something[foo]); console.log(something.bar)
请谨慎操作:由于javascript编译器未重命名字符串,但确实重命名了对象属性,因此会在此处出错
有关为何可行的更多信息:JS对象是关联数组,这就是原因。延伸阅读:quirksmode.org/js/associative.html stackoverflow.com/questions/14031368/...
@dotnetguy不,他们不是。数组是从普通JS对象原型继承的对象,因此您可以像其他普通对象一样随意添加属性。“关联”行为更像是对象而不是数组。您不能通过简单的索引来迭代“关联”版本,因此它不会显示类似数组的行为。您可以将“关联”数组定义为{}或[],并在涉及随机属性访问的任何一种情况下都将其视为相同。
@VanquishedWombat不确定您的反对意见是关于什么的?我不是说JS对象是数组吗?
作为正确答案的参考