括号[] vs。访问对象属性时的语法?

时间:2013-04-05 23:20:06

标签: javascript

请考虑以下代码:

    var friends = {
    bill: {
        firstName: "Bill",
        lastName:"William",
        number: "212-555-1212",
        address: ['Main Street', 'Yakama', 'WA','90012']
    },
    steve: {
        firstName: "Steve",
        lastName: "Steven",
        number: "818-555-1212",
        address: ['Any Street', 'Eureka', 'CA','90013']
    },
    betty: {
        firstName: "Betty",
        lastName: "Draper",
        number: "503-555-1212",
        address: ['Your Street', 'Madison', 'WI','90014']
    }
};

var search = function(name){
    for(var prop in friends){
        if(friends[prop].firstName === name){
           console.log(friends[prop]);
           return friends[prop];
        }
    }
};

我的问题是关于这一部分:

if(friends[prop].firstName === name)

我想了解[prop]周围括号的用法以及为什么在这种情况下它们是必要的。我非常熟悉点语法表示法,但不熟悉这些括号。

关于我的问题是否重复:我前面提出的问题和提出相同的问题实际上是一个偏好问题,即使用点语法与括号表示法有什么好处。我的问题本质上更为基础,并问为什么要使用它,更具体地说,为什么在我所展示的特定情况下它是必要的。此外,我没有看到其他帖子回答了我更基本的问题。

对那些嘲笑我并投票支持我的人的一句话,称我懒惰,并没有在网上搜索或转向右边:我在网上搜索答案,但有大量的网页与各种问题相关但不完全或根本没有回答我的问题。此外,如果您没有使用正确的短语或关键字搜索网络,您可能永远找不到您正在寻找的答案。我不熟悉JS中的这种特殊语法,所以也许我没有使用正确的短语或关键词进行搜索。

最重要的是,我认真地问这个问题,以便让自己更好地成为一名程序员。如果我唯一在这里失败的是你们中的一些人认为这是学习或不知道这一切的主要编程罪,那么在这里发表评论的某些人有小问题和傲慢的问题,这不是我的问题。

尽管如此,我非常感谢真诚地回答我的问题的那些人,非常感谢。

4 个答案:

答案 0 :(得分:5)

通过使用括号,您可以定义要动态访问的属性。使用点表示法,您需要知道代码中属性的名称,而使用括号可以在运行时确定它。

答案 1 :(得分:3)

括号内容是一个表达式,用于获取属性名称。它允许您将对象用作关联数组。

在您的代码中,friends[prop]评估变量prop。如果是barry,则会检索friends.barry,如果它betty检索friends.betty,依此类推。

当您在.之后给出属性名称时,它会被字面上处理,而不是作为要评估的表达式。因此object.prop相当于object["prop"]

答案 2 :(得分:2)

当您使用变量来获取密钥或其自身的密钥是字符串时,必须使用括号语法:

var obj = { foo: 'foo', 'foo-bar': 'foo-bar' };

obj.foo // 'foo'
obj.foo-bar // error, invalid syntax
obj['foo-bar'] // 'foo-bar'

var key = 'foo';

obj.key // error not found
obj[key] // 'foo'

答案 3 :(得分:1)

foo.prop会出错,因为foo没有名为prop的属性。 foo[prop]有效,因为prop计算的字符串是foo属性的名称。