通过括号访问的 Javascript 对象属性分配了另一个属性的值?

标签 javascript

我知道以下代码的作用,但我无法理解为什么。

var myObject = new Object();
var foo = new Object();
var bar = new Object();

myObject[foo] = 'foo';
myObject[bar] = 'bar';
console.log(myObject[foo]);  // returns bar
console.log(myObject); // returns [object Object]: "bar"
console.log(myObject[blah]); // returns "blah not defined" error.

通过这种衡量,myObject[blah] 是如何未定义的,而 myObject[foo] 和 myObject[bar] 是如何定义的 - 不仅定义了,而且设置为相同的值?

根据 http://www.w3schools.com/js/js_objects.asp可以通过 object.property object[property] 访问对象的属性,但是如果我添加 myObject.foo = "foobar "; 在控制台记录之前,myObject[foo] 未设置为“foobar”,但 myObject.foo 设置为“foobar”。

如果我 console.log myObject.ObjectmyObject.objectmyObject[object]myObject[Object] - 返回时都是未定义的。

foo 和 bar 的值都是 Object {}。所以它们没有被设置。

最佳答案

这里的类型有问题。

foo 是一个对象,您不能以另一个对象作为键访问一个对象的属性。

虽然 foo 将被转换为字符串并且不会发生错误,但请注意,最终将被评估的是:

myObject[foo] = 'foo';
myObject[bar] = 'bar';

翻译成

myObject["[object Object]"] = 'foo';
myObject["[object Object]"] = 'bar';

By this measure, how is myObject[blah] undefined yet myObject[foo] and myObject[bar] are defined - and not only defined, but set to the same value?

此消息错误不会告诉您 key 不存在,因为它不会是错误。相反,它告诉您的是 blah 是您尝试使用的变量,而您之前从未定义过它,因此会引发 undefined reference 错误。


此外,不相关但 {} 的语法始终优​​于 new Object()

关于通过括号访问的 Javascript 对象属性分配了另一个属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783009/

相关文章:

javascript - jQuery div 旋转器

javascript - 无法读取未定义的属性 - 代码或服务器有问题吗?

javascript - 我可以切换多次出现的类的特定实例吗?

如果按下取消,Javascript 确认不会停止回发请求?

javascript - JQGrid:根据内容动态将单元格设置为不可编辑

javascript - JS 高度 100%

javascript - 我无法获取 d3-maps 来绘制我的 "Landkreise"

javascript - 访问绑定(bind)函数内的对象值

javascript - 使用跨域Ajax进行搜索?

javascript - 有关调试 Web 应用程序的术语