2016-11-01 5 views
0

動的な型指定をjavascriptがどのように実行するか(または私の場合は実行しないで)奇妙な問題があります。オブジェクトの属性の種類を強制的に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

整数だけをチェックしたい場合は、 'parseInt(kyselykiintio、10)== kyselykiintio'はもっと簡単でしょうか? – adeneo

答えて

0

問題は比較演算子でした。 ===は実際には同じデータ型であることを確認しますが、実際にはそうではありません。解決方法は==

関連する問題