javascript对象在我们的循环中可用,但在循环中未定义

javascript对象在我们的循环中可用,但在循环中未定义,javascript,arrays,json,ajax,Javascript,Arrays,Json,Ajax,我这里有个问题。 在从ajax解析JSON对象之后,我得到了一个对象(usrobj) console.log(usrobj.available[0]); 其中usrobj.available是一个数组 (2) [{…}, {…}] 0:{currency: "ETH", amount: "0.5"} 1:{currency: "BTC", amount: null} length:2 __proto__:Array(0) 这会导致像这样的vardump {currency: "ETH", a

我这里有个问题。 在从ajax解析JSON对象之后,我得到了一个对象(usrobj)

console.log(usrobj.available[0]);
其中usrobj.available是一个数组

(2) [{…}, {…}]
0:{currency: "ETH", amount: "0.5"}
1:{currency: "BTC", amount: null}
length:2
__proto__:Array(0)
这会导致像这样的vardump

{currency: "ETH", amount: "0.5"}
amount:"0.5"
currency:"ETH"
__proto__:Object
然而,当我尝试循环通过

for(i = 0; i < usrobj.available.length; ++i) {
    $('#assets-table').append('<tr>\
      <td>'+usrobj.available[i].currency+'</td>\
      <td>Available: '+usrobj.available[i].amount+' (Frozen: '+usrobj.frozen[i].amount+')<br /></td>\
...removed for brevity...
for(i=0;i\
…为简洁起见删除。。。
未捕获的TypeError:无法读取未定义的属性“0”

at Object.success (readAssets.js:22)
at i (jquery-3.2.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
at A (jquery-3.2.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4)
at Object.success(readAssets.js:22)
at i(jquery-3.2.1.min.js:2)
在Object.fireWith[as resolveWith](jquery-3.2.1.min.js:2)
在A(jquery-3.2.1.min.js:4)
在XMLHttpRequest上。(jquery-3.2.1.min.js:4)

有谁能告诉我它们是否在不同的范围内?我如何解决这个问题?

您的对象没有“冻结”属性

“usrobj.freezed[i].amount”所以它崩溃了

如果usrobj.freeze在同一位置的值与usrobj.available的值相同,则需要类似以下内容:

let usrobj = {
  available: [
    {currency: "ETH", amount: "0.5"},
    {currency: "BTC", amount: null},
  ],
  frozen: [
    null,
    {ammount: '10'}
  ]
}

  for(let i in usrobj.available){
    console.log(
      `Avaiable ${usrobj.available[i].amount}
      Frozen ${(usrobj.frozen && usrobj.frozen[0] && usrobj.frozen[0].amount) || 0}
      `)
  }

当您在jquery append函数内运行代码usrobj.available[i].currency时,请尝试将this引用保存到jquery函数外的变量,并使用ref.usrobj.available[i]访问append函数内的usrobj.available[i].currency

for(i=0;i}
可能是您试图在检索数据之前使用数据。请尝试将追加循环代码放入ajax请求的回调部分。问题可能出在
usrobj.freezed[i]
part,因为您没有在代码段中测试它?请用一个演示问题的示例更新您的问题,最好是使用堆栈代码段(
[]
toolbar按钮;)运行的问题。正如@zfrisch所说,您可能试图在填充对象之前使用它,并且被它愚弄了。(尝试
console.log.)(JSON.stringify(usrobj.available[0]);
)谢谢!确实没有定义冻结。也谢谢ajax的解释部分!我也这么说,但是你不能说对象没有冻结属性,因为我们不知道
usrobj
的形状,我们只能猜测
usrobj的形状。可用的
没有必要。全局范围仍然是global作用域,您不需要引用它来访问手头的变量。