while循环中的条件表达式无法按预期工作

时间:2019-02-15 10:13:06

标签: javascript while-loop expression increment

我对while循环进行了条件测试,但似乎没有用。 我认为是因为增量运算符。但我不知道为什么

<flatcheckbox:FlatCheckBox x:Name="xDGCheck" Margin="0" IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

预期[3,5,7,5]
实际结果[3、5、15、7、5]
我不知道为什么会出来15个。

我想知道while循环为什么这样工作。

更新:

此问题来自《学习javascript第三》一书 和class Card extends Component { constructor() { super(); this.state = { button:"", i:0 } } onClick = (event)=>{ this.setState({button: event.target.id}) if(this.state.button==="1") { this.setState({ i: this.state.i + 1 }); } else if(this.state.button==="2") { this.setState({ i: this.state.i - 1 }); } console.log(this.state.i) } render() { return( <div className="App"> <div > <NavBar onButtonClick={this.onClick}/> <CardList i={this.state.i} /> </div> </div> ); } } export default Card;逗号运算符无法正常运行。

2 个答案:

答案 0 :(得分:2)

这里。您应该在while循环内设置一个条件,因为如果条件为假,则整个循环将终止。

const nums = [3, 5, 15, 7, 5];
let n, i = 0;
while (i < nums.length) {
  if ((n = nums[i++]) < 10) {
    console.log(`Number less than 10: ${n}.`);
  }
};

答案 1 :(得分:2)

如果将,纠正为&&

,则在15时,while是快捷方式。

逗号运算符返回i++ < nums.length

的结果

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

您真的想研究一下ES5 / ES6并进行过滤

let smallNums = [3, 5, 15, 7, 5].filter((n) => n<10)
console.log(smallNums)

没有ES6箭头的情况:

let smallNums = [3, 5, 15, 7, 5].filter(function(n) { return n<10; })
console.log(smallNums)