1

我是 Java 脚本的新手。在我的两本书中:http ://www.larryullman.com/books/modern-javascript-develop-and-design和http://www.packtpub.com/object-orientated-javascript/book 两位作者都说这种表示法:object[unknownYetProperty]当我们有对象和变量是对象的未来属性时应该工作。问题是另外两个符号有效object['unknownYetProperty']object.unknownYetProperty但不是第一个。

var a1 = 'spring';
var a2 = 'autumn';
var a3 = 'summer';

var object = {
    propertyA1 : a1, // according to books this only this should work :-/
    propertyA2 : a2,
    propertyA3 : a3
}

console.log(object[propertyA1] + ' ' + object['propertyA2'] + ' ' + object.propertyA3);

工作示例:http: //jsfiddle.net/cachaito/p78Le

谁能给我解释一下?

4

4 回答 4

4

问题object[propertyA1]在于propertyA1不存在。

基本上,这就像执行以下操作(也不起作用):alert(propertyA1);

与其他两个相反,它们正确引用了对象上的字段:

object['propertyA2'] === object.propertyA2 === a2 == 'autumn'

object.propertyA3 == a3 == 'summer'

这就是它的工作方式:

var propertyA1 = 'propertyA1',
    temp = object[propertyA1]; // === 'spring'
于 2013-05-02T11:14:09.527 回答
3

propertyAl不存在。字符串文字和点符号起作用的原因是因为您正确地访问了对象的属性。在第一个中,您尝试访问object[undefined],因为未定义 propertyA1。

于 2013-05-02T11:12:57.203 回答
1

您使用数组表示法访问的属性应指定为字符串。

object['propertyA1']

是访问对象属性的正确方法。

每当您创建一个对象时,冒号符号的左侧始终是一个字符串。因此,当使用数组表示法访问时,字符串应该用于属性。

于 2013-05-02T11:12:40.970 回答
1

好吧,当你写这个时:

object['propertyA1']

Javascript 试图找到一个名为propertyA1inside object 的属性。

但是当你使用时:

object[propertyA1]

Javascript 试图在对象内部找到一个名为...的属性...呃,让我们看看里面有什么var propertyA1... WTF?没有那个名字的变量!!好的,那么 propertyA1 是未定义的,所以:

object[undefined]

不同之处在于 Javascript 知道 'propertyA1' 是什么(字符串 xD),但是当您删除引号时,这不是字符串,而是您尚未声明的变量。

于 2013-05-02T11:22:04.890 回答