我是Javascript新手,我想知道为什么当我创建以下对象时…
this.prospectCollection = {};
我不能使用(参考第14行)
miningProspect(num,address)
{
console.log(`Checking for string: ${num}`);
let odds;
if(num == 0 || num == 0.00000000001 || num == 0.00000000005 || num == 0.00000000010)
{
if(address in this.prospectCollection)
{
this.prospectCollection[address][num] += 1;
//calculate prospects here
}
else
{
this.prospectCollection[address][num] = 1;
}
}
else
{
return false;
}
return true;
}
我想给对象一个动态的名字我用了括号符号但是它在控制台上给了我这个错误。
this.prospectCollection[address][num] = 1;
^
TypeError: Cannot set property '0.00000000001' of undefined
任何帮助或见解将不胜感激。
编辑:
是this.prospectCollection = {[address]:{[num]:1}};
吗?这样就不能把它赋值给那个了就不能像对数组那样使用。push()了?
基本上,代码的关键部分可以这样重写:
if(!(address in this.prospectCollection))
{
this.prospectCollection[address][num] = 1;
}
但这是不正确的JS,因为你基本上试图访问undefined
的属性(这是this.prospectCollection[address]
)。JS中没有自活。
一种可能的方法是创建一个对象,如果它不存在(手动激活):
this.prospectCollection[address] = this.prospectCollection[address] || {};
this.prospectCollection[address][num] = (this.prospectCollection[address][num] || 0) + 1;
另一个可行的选择是使用一些提供自动验证的库函数——比如lodash.set。它可以像……一样简洁。
const path = ['prospectCollection', address, num];
_.set(this, path, _.get(this, path, 0) + 1);