JavaScript論理または三元演算子優先度による不具合
2669 ワード
最近は一つのプロジェクトを引き継いで、一つのバグを受け取りました.毎回インターフェースから戻ってくるデータは前回の古いデータです.だから、現在のプロジェクトのインターフェース配置ファイルを調べました.
慎重に調べた結果、疑わしいコードが発見されました.大体このようにします.
コードの作者の考えは次の通りだと思います.は、まず に直接戻る.が存在しない場合、右側の三元演算子 に進む. に戻る.
ただし、上記のコードの実際の動作方式は以下の通りである.は、まず に戻る.は次に に戻る.
解決方法は簡単です.括弧を入れてもいいです.
慎重に調べた結果、疑わしいコードが発見されました.大体このようにします.
'12345' || '67890' ? '67890' : ''
このコードは一見して、12345
に戻るべきですが、実際には、67890
に戻ります.コードの作者の考えは次の通りだと思います.
12345
が存在するかどうかを判断し、存在する場合は、12345
'12345'
'67890' ? '67890' : ''
'67890' ? '67890' : ''
'67890' ? '67890' : ''
67890
が存在すれば、67890
に戻り、そうでなければ、‘’ただし、上記のコードの実際の動作方式は以下の通りである.
12345
と67890
と判断し、12345
が存在する場合は12345
に戻り、そうでなければ67890
に戻るので、以下の両方がtrueであると仮定して、12345
'12345' || '67890'
12345
がtrueであるかどうかを判断し、trueであれば67890
に戻り、そうでなければ''
'12345' ? '67890' : ''
したがって、12345
がtrueであると予想されたら、そのまま戻ってきますが、12345
はtrueで、確かに67890
に戻ります.解決方法は簡単です.括弧を入れてもいいです.
'12345' || ('67890' ? '67890' : '')
まとめ:論理または優先度が三要素演算子より大きいと結論できます.