[英]JavaScript Dot Notation with Objects in Objects
我現在正在玩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上搜索了一下,我覺得這個問題也是這樣,但我想我並不完全理解所有引號的問題。
使用括號表示法時,在括號之間放置要訪問的屬性的名稱,名稱是字符串。
使用點表示法時,鍵入屬性名稱,而不是包含點后屬性名稱的字符串。
你的路線:
friends.prop
JavaScript解釋如下:
在對象friends
上查找名為prop
的屬性,並且沒有這樣的屬性,因此您會遇到問題。
您不能使用帶點符號的變量。 不會評估變量。 JavaScript將嘗試從您的對象訪問屬性prop
,這是不存在的,因此第二個解決方案無法正常工作。
friends.firstName相當於friends ['firstName']
如上所述, friends.prop.firstName
不會將prop
評估為變量,而是作為friends
對象的屬性。
如果由於某種原因,您希望使用這種類型的表示法,則可以將字符串計算為對象。
var search = function(name) {
for(var prop in friends) {
if(eval("friends."+prop+".firstName) === name) {
return eval("friends."+prop);
}
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.