我现在正在玩JS,来自Java。我做了一些教程,需要帮助JS中的点和括号表示法。
我做了一些东西,我认为JS中的“对象”。它被称为“朋友”。在这个对象中,还有另一个对象“bill”。
var friends = {};
friends.bill = {
firstName: "Bill",
lastName: "Gates",
number: "(206) 555-5555",
address: ['One Microsoft Way','Redmond','WA','98052']
};
var search = function(name) {
for(var prop in friends) {
if(friends[prop].firstName === name) {
return friends[prop];
}
}
};
search("Bill");
这显然是按预期工作的。我在搜索功能中使用括号表示法。 但是我不清楚为什么这个版本不会以同样的方式工作:
var search = function(name) {
for(var prop in friends) {
if(friends.prop.firstName === name) {
return friends.prop;
}
}
根据我的理解,括号和点符号用于相同的事情。我对stackoverflow进行了搜索,我认为this问题的方式是一样的,但我认为我并不完全理解所有引号的问题。
答案 0 :(得分:2)
使用括号表示法时,在括号中输入要访问的属性的名称,名称为字符串。
使用点表示法时,键入属性名称,而不是包含点后属性名称的字符串。
你的专栏:
friends.prop
由JavaScript解释如下:
在对象prop
上查找名为friends
的属性,并且没有这样的属性,因此您会遇到问题。
答案 1 :(得分:2)
您不能使用带点符号的变量。不会评估变量。 JavaScript将尝试从您的对象访问属性prop
,因为第二个解决方案无效。
答案 2 :(得分:0)
friends.firstName相当于friends ['firstName']
答案 3 :(得分:0)
如前所述friends.prop.firstName
不会将prop
评估为变量,而是评估friends
对象的属性。
如果由于某种原因,您希望使用这种类型的表示法,可以将字符串计算为对象。
var search = function(name) {
for(var prop in friends) {
if(eval("friends."+prop+".firstName) === name) {
return eval("friends."+prop);
}
}
};