JavaScript和方括号表示法

时间:2013-05-02 11:09:04

标签: javascript object

我是Java Script的新手。在我的两本书中:http://www.larryullman.com/books/modern-javascript-develop-and-designhttp://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

有人可以向我解释一下吗?

4 个答案:

答案 0 :(得分:4)

object[propertyA1]的问题是propertyA1不存在。

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

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

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

object.propertyA3 == a3 == 'summer'

这就是它的工作原理:

var propertyA1 = 'propertyA1',
    temp = object[propertyA1]; // === 'spring'

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

object['propertyA1']

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

无论何时创建对象,冒号符号的左侧始终为字符串。因此,当使用数组表示法访问时,字符串应该用于属性。

答案 3 :(得分:1)

好吧,当你写这个:

object['propertyA1']

Javascript尝试在对象中找到名为propertyA1的属性。

但是当你使用:

object[propertyA1]

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

object[undefined]

区别在于Javascript知道'propertyA1'是什么(字符串xD)但是当你删除引号时,那不是字符串,那是你还没有声明的变量。