2017-05-28 19 views
0

私は奇妙なjavascriptの問題があります。私はAPIからいくつかのデータを取得するためにvue jsとaxiosを使用しています。私はconsole.logをダンプして、値はそこにありますが、私のif文は真ではありません。Javascriptがtrueを返さない場合

コードの例が小さくなるように削除されました。

インラインコメントを参照してください。

HTML: 

<input v-model="system_id"> 
<button v-on:click="getSystemData" class="btn btn-primary">Get system data</button> 


Data model: 

data:() => ({ 
    errors: [], 
    system_id: null, 
    system_data: null 
}), 



Function: 

getSystemData() { 
    HTTP.get('/api/get_systems') 
    .then(response => { 
     this.response = response.data 

     // equals 1234 
     console.log(this.system_id) 
     for (var key in this.response) { 

     // the id 1234 is found here in a large list 
     console.log(this.response[key].system_id) 


     // Does not go true?!?! 
     if (this.response[key].system_id === this.system_id) { 
      this.system_data = this.response[key].system_data 
     } 
     } 
    }) 
    .catch(e => { 
     this.errors.push(e) 
    }) 
    } 

なぜトリガーしないのですか?

+0

まず、このステートメントが実際に真であることを確認します。例えば、前に行にデバッガを置くことによって。あるいは、その声明が真実であれば、どうやって自分自身を証明しましたか? – trueunlessfalse

+0

'this.system_id'のタイプは何ですか? https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons –

+0

'==='の代わりに '=='を試してみてください。 '==='演算子は、値と型をチェックします。あなたのケースはわかりませんが、値に異なるタイプがあるとします。 'number'と' string'ですか? – mingos

答えて

2

不一致のデータ型に問題がある可能性があります。 ===演算子は、if(1234 === "1234")に対してfalseを返します。 ==演算子を使用する

+2

何がうまくいかなかったかを理解するために、私はデバッガを使用し、型の違いを見て、理由を理解しようとします。そうすれば、ここで==を使うことを意識的に決めることができます。これは他の状況では悪い選択かもしれません。 – trueunlessfalse

+0

はい、文字列と整数の比較でした。私は使用しなければならなかった:if(this.response [key] .system_id === Number(this.system_id))... == eslintを使って不平を言った。 – John