Javascript 首次单击不会触发警报

Javascript 首次单击不会触发警报,javascript,Javascript,看看这个简单的函数: handleEventClick(i){ this.setState({choosenDriver: this.state.drivers[i]}); alert(i); for (let ix in this.state.choosenDriver.cars) { alert(ix); } } 我希望在单击时触发alerti和alertix 由于某些原因,alertix不会在第一次单击时启动,但会在第二

看看这个简单的函数:

handleEventClick(i){  
   this.setState({choosenDriver: this.state.drivers[i]});
   alert(i);
   for (let ix in this.state.choosenDriver.cars) {
   alert(ix);               
    }
 }
我希望在单击时触发alerti和alertix

由于某些原因,alertix不会在第一次单击时启动,但会在第二次单击时正常工作。然而,alerti的工作原理应该是这样的

有人能解释一下吗? 谢谢大家!

更新:

谢谢你们两个的回答。我肯定你已经解释了这个问题,但我还是不明白

现在我试试这个:

handleEventClick(i){
   this.setState({choosenDriver: this.state.drivers[i]});
   let a = this.state.choosenDriver.cars;

   Array.prototype.forEach.call(a, function(child) {
    // Do something with `child`
   alert(child);
});
在第一次单击时,它会生成以下错误:

Uncaught TypeError: Array.prototype.forEach called on null or undefined

但在循环之前,我确实在第一行定义了choosenDriver,所以我不明白为什么会出现此错误。

很明显,this.state.choosenDriver.cars没有自己的属性,所以您不会第一次看到alertix。@dfsq:听起来像是一个答案。:-除了它不必是自己的财产外,继承的财产也会出现。可枚举,是的,但拥有,不是。@Roger:如果cars是一个数组,请注意,现在几乎肯定不是这样,您应该遍历它的条目。提供一个方法列表,但可以使用forEach或类似方法,或者至少在循环中添加hasOwnProperty检查;它得到它的值。还是我错了?车是一个数组,我会看看你的链接!但是你不认为在代码中的这个位置循环浏览[汽车]是个好主意吗?我不知道还能在哪里做,每次选择河流改变,我都需要在那里对汽车做些事情。