Freecodecamp: 访问变量令人费解的对象属性?

创建于 2016-12-21  ·  10评论  ·  资料来源: freeCodeCamp/freeCodeCamp


挑战名称


使用变量访问对象属性

问题说明


这个挑战使我感到困惑。 由于在以前的挑战与访问对象。 我读到方括号仅应在需要访问的属性中有空格时使用。 现在,在此挑战中,他们希望我在属性没有空格的情况下使用方括号表示法

help wanted

最有用的评论

当您必须访问其名称在程序执行期间动态收集的属性时, @ ChrisKissoon括号表示法很有用。
例如

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name")

console.log(obj[someProp]) // -> "John"

如果不太冗长,我们可以在说明中解释这个概念

所有10条评论

/ cc @ FreeCodeCamp /主持人
如果说明需要更多说明,谁能帮助分类? 我可能有偏见,但对我来说似乎直截了当。

当您必须访问其名称在程序执行期间动态收集的属性时, @ ChrisKissoon括号表示法很有用。
例如

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name")

console.log(obj[someProp]) // -> "John"

如果不太冗长,我们可以在说明中解释这个概念

感谢@ Emt-Ant,我们是否需要更新说明以进一步澄清? 你的意见?

@raisedadead @ Em-Ant,
我可以理解这些混乱之处,对imho进行更清晰的更新听起来是个好主意。

对于具有以下示例的新手:

var someProp = "propName";
var myObj = {
  propName: "Some Value"
}
myObj[someProp]; // "Some Value"

容易想到,“为什么不做myObj.propName,因为我们在做同样的事情”

再次,第二个示例:

var myDog = "Hunter";
var dogs = {
  Fido: "Mutt",
  Hunter: "Doberman",
  Snoopie: "Beagle"
}
var breed = dogs[myDog];
console.log(breed);// "Doberman"

做同样的事情。 它只是将值附加到变量。 为什么我们甚至需要一个变量? 我绝对认为我们应该像@ Em-Ant所说的那样添加一个示例,其中变量是动态更改的。 因为如果您只是将一个变量设置为等于字符串并使用该变量,则它没有任何意义。 仅使用点符号会更实用。 除非您解释了为什么我们首先需要使用变量而不是点表示法,否则挑战就毫无意义。 因此,我的投票是增加另一个示例并阐明为什么使用变量。

@IsaacAbrahamson谢谢。

贡献者还需要与Updating Object Properties一起重构这个挑战。 在提出拉取请求之前,请先在下面评论并建议对两者进行重构。

/ cc @erictleung有何想法?

另外请检查@systimotic'https : //github.com/FreeCodeCamp/FreeCodeCamp/issues/12125#issuecomment -269246606

@raisedadead
通过阅读与对象表示法有关的所有问题,我了解对于初学者而言这并不明显。 他们对我来说直截了当。 为了使其更简单,如何进行这些更改。

访问对象:(https://github.com/FreeCodeCamp/FreeCodeCamp/issues/12141)

var currency = {
   USA  : "dollar",
   London : "euro",
   India : "rupee",
}
function getCurrency(country){
 return country +" currency is "+currency[country] +" ";
}
getCurrency("USA") // "USA currency is dollar" 

我看不到Updating Objects的任何问题。 如我错了请纠正我。
甚至我都在考虑添加嵌套对象挑战。 让我知道我如何可以帮助改善这一点。

@raisedadead让我们看看我是否可以解决此对象问题。

贡献者还需要与Updating Object Properties一起重构这个挑战。 在提出拉取请求之前,请先在下面评论并建议对两者进行重构。

因此,对于对象的最初挑战“构建JavaScript对象” ,示例对象的所有属性均为字符串。 也许我们可以添加另一个具有不同类型属性的示例对象,例如

var sampleObject = {
  property_1: "Green",
  2: "Hal",
  "property_3": "Lantern"
};

可能更令人困惑,但它确实探索了物体的可能性,这可能会促使露营者进行一些调查。 另外,“使用变量访问对象属性”的种子代码以数字作为属性,这在之前的三个对象挑战中都没有显示。


我读到方括号仅应在需要访问的属性中有空格时使用。

可以通过更改“用括号表示法访问对象属性”中介绍的

如果您尝试访问的对象的属性中有空格,则需要使用方括号表示法。

可以更改为

如果您尝试访问的对象的属性中有空格,则需要使用方括号表示法。 但是,您仍然可以在没有空格的属性上使用方括号表示法。

然后,我们可以修改示例对象以显示您也可以具有不带空格的属性。

var myObj = {
  "Space Name": "Kirk",
  "More Space": "Spock",
  "NoSpace": "USS Enterprise"
};
myObj["Space Name"]; // Kirk
myObj['More Space']; // Spock
myObj["NoSpace"];    // USS Enterprise

对于“使用变量访问对象属性” ,我喜欢@ Em-Ant的建议,例如替换第一个示例,即删除

var someProp = "propName";
var myObj = {
  propName: "Some Value"
}
myObj[someProp]; // "Some Value"

并将dogs对象示例作为第一个示例,并进行如下操作

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name");
console.log(obj[someProp]); // "John"

作为第二个例子。

怎么说括号表示法是操作对象的一种更动态的形式。 您可以使用可以超出大多数JavaScript声明规则的字符串,例如以数字开头和使用带空格的字符串a作为属性名称。 您也可以将变量放在方括号内,以允许动态或通过某些副作用分配属性。 例如,假设您的程序中有一个对象,并且不确定在创建过程中需要的属性是什么,因此您允许程序在运行时分配它们。

此页面是否有帮助?
0 / 5 - 0 等级