-1

考虑以下代码:

    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

4 回答 4

5

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

于 2013-04-05T23:21:56.370 回答
3

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

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

当您在 之后给出属性名称.时,它会按字面意思处理,而不是作为评估的表达式。所以object.prop等价于object["prop"]

于 2013-04-05T23:24:22.987 回答
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'
于 2013-04-05T23:23:16.993 回答
1

foo.prop将是错误的,因为foo没有名为 的属性propfoo[prop]有效,因为prop计算为一个字符串,它是foo的属性的名称。

于 2013-04-05T23:24:51.610 回答