我有一个奇怪的问题,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.据我所知,动态类型转换应该在这一点上发生。为什么不发生?如果属性是整数,我如何确保该属性设置为整数?
答案 0 :(得分:0)
问题是比较运算符。 ===
检查它们实际上是相同的数据类型,实际情况并非如此。解决方案是将其替换为==