簡體   English   中英

對象中的對象的JavaScript點表示法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM