如何在javascript中强制对象属性类型并做出反应

时间:2016-11-01 10:33:22

标签: javascript html reactjs

我有一个奇怪的问题,javascript如何执行(或者在我的情况下不执行)动态类型。

我有以下代码,它将读取字段中的输入,将其传递给另一个函数,该函数将其指定为 kyselyoikeus 的属性。

  <input type="text" id={"kyselykiintioForLupatyyppi_" + this.props.lupatyyppi.lupatyyppi + "_input"}
    value={this.state.kyselykiintio}
    disabled={!kyselyoikeus.kaytossa}
    onChange={(event) => this.handleChangeQueryLimit(event.target.value)}
    className={this.state.invalidKyselykiintio ? "invalidPassivointiTime" : null} />
  handleChangeQueryLimit(kyselykiintio) { 
    this.setState({
      kyselykiintio: kyselykiintio,
      invalidKyselykiintio: !isKyselykiintioValid(kyselykiintio)
    }, () => this.props.changeQueryLimit(this.props.kyselyoikeus, kyselykiintio))
  }

输入值应该是一个整数,但仍然可以在输入中输入任意字符串,它将被分配给目标对象属性。只有在发布之前的验证阶段,才会检查该属性是否为有效数字,并带有以下代码

export const isKyselykiintioValid = (kyselykiintio) => {
    // Is a whole number, 0 or more
    return Number(kyselykiintio) === kyselykiintio && kyselykiintio % 1 === 0 && kyselykiintio >= 0
}

现在的问题是,即使用户输入一个整数,它也被分配给对象作为字符串(当我在控制台中记录对象时引用值),因此isKyselykiintioValid返回0.据我所知,动态类型转换应该在这一点上发生。为什么不发生?如果属性是整数,我如何确保该属性设置为整数?

1 个答案:

答案 0 :(得分:0)

问题是比较运算符。 ===检查它们实际上是相同的数据类型,实际情况并非如此。解决方案是将其替换为==