【发布时间】:2015-04-21 20:59:31
【问题描述】:
我知道以下代码的作用,但我无法理解为什么。
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 可以。
如果我 console.log myObject.Object 或 myObject.object 或 myObject[object] 或 myObject[Object] - 一切都以未定义的形式返回。
foo 和 bar 的值都是 Object {}。所以他们没有被设置。
【问题讨论】:
-
object.property与object['property']相同,而不是object[property]。您看到“blah not defined”是因为找不到名为blah的变量。object['blah']会避免该错误,尽管属性本身是未定义的。
标签: javascript