我知道以下代码的作用,但我无法理解为什么。
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.Object
或 myObject.object
或 myObject[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/