我是Java Script的新手。在我的两本书中:http://www.larryullman.com/books/modern-javascript-develop-and-design和http://www.packtpub.com/object-oriented-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
谁能给我解释一下吗?object[propertyA1]
的问题是propertyA1
不存在。
基本上,它就像做以下操作(也不起作用):alert(propertyA1);
与其他两个正确引用对象上的字段相比:
object['propertyA2'] === object.propertyA2 === a2 == 'autumn'
object.propertyA3 == a3 == 'summer'
本来是这样的:
var propertyA1 = 'propertyA1',
temp = object[propertyA1]; // === 'spring'
propertyAl
不存在。字符串字面值和点表示法之所以有效,是因为您正确地访问了对象的属性。在第一个中,您试图访问object[undefined]
,因为propertyA1没有定义。
好吧,当你写这个的时候:
object['propertyA1']
Javascript试图在对象中找到一个名为propertyA1
的属性。
但是当你使用:
object[propertyA1]
Javascript试图找到一个名为…嗯,让我们看看var propertyA1
里面有什么……WTF ?没有这个名字的变量!!那么propertyA1是undefined
object[undefined]
区别在于Javascript知道'propertyA1'是什么(字符串xD),但当你删除引号时,这不是字符串,这是一个变量,你还没有声明。
使用数组表示法访问的属性应该指定为字符串。
object['propertyA1']
是访问对象属性的正确方法。
无论何时创建对象,冒号的左侧总是一个字符串。因此,在使用数组表示法访问时,应该将字符串用于属性。