0

データがテーブルに書き込まれる条件を変更しようとしています。これを変更しようとすると、奇妙な結果に気付きました。どのような条件を適用しても、WriteToTable 関数が実行されるようです。これをテストするために、次のことを行いました。

var TestThis=0;

if (TestThis=1000){
WriteToTable(iPlaceDisplayNum, place.name, place.rating, xScoreFinal, iProspect, place.url, place.formatted_phone_number);
alert ('This alert should not be displaying.');
}

関数は引き続き実行され、スクリプトの実行時にアラートが表示されます。なぜかわからないのですが?

関数の残りの部分は次のとおりです。問題は下の方にあります。

function printme(place, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {


        if (typeof place.reviews !== 'undefined') {

            var xScore = 0;
            var xGlobal = 0;

            for (var i = 0; i < place.reviews.length; i++) {

                reviews = place.reviews[i];


                for (var x = 0; x < reviews.aspects.length; x++) {
                    aspectr = reviews.aspects[x];
                    xScore += aspectr.rating;
                    xGlobal++;
                }
            }
            var xScoreFinal = (xScore / xGlobal);

        }

        if (typeof xScoreFinal !== 'undefined') {
            iPlaceDisplayNum++;

            var iProspect;
            if (xScoreFinal < 2.3) {
                iProspect = 'Yes';
            }


     //Not sure what's going on here
     var TestThis=0;

            if (TestThis=1000){
        WriteToTable(iPlaceDisplayNum, place.name, place.rating, xScoreFinal, iProspect, place.url, place.formatted_phone_number);
        alert ('This alert should not be displaying.');
        }

        }
    }
}
4

5 に答える 5

7

if条件チェックで変数に値を割り当てています。変数TestThisには値 1000 が割り当てられています。これは、JavaScript によってブール値に変換された後に true になります。そのため、関数は常に実行されています。自動型変換の詳細については、こちらをご覧ください。

コードを修正するには、これを変更します-

if (TestThis=1000)

これに -

if (TestThis == 1000)

または、自動型変換が必要ない場合 -

if (TestThis === 1000)

次のように、比較で値を逆にしたい場合があります-

if (1000 === TestThis)

これはヨーダ状態と呼ばれます(そう、グランドジェダイマスターヨーダにちなんで名付けられました). 利点は、定数に何も割り当てることができないため、誰かが誤って 1 つの等しい値だけを入力した場合にエラーが発生することです。ただし、個人的には使用したことがありません (型にはまらないので、おそらく使用することはありません)。

于 2013-08-30T18:44:55.773 に答える
4

JavaScript では、条件文に値を割り当てることができるため、TestThis=1000結果は 1000 になり、条件文で正の数 (実際には 0 以外のもの) は true と評価されます。

条件付きにするには、次のことを行う必要があります(そして、 は 2 つの実際の比較を強制し、条件付きの一部を他の部分と等しくなるように変換しようとしないためTestThis===1000、ほとんどの場合、===over==を使用する必要があります)。===

することもできます1000 === TestThis(またはその逆1000 == TestThis)。これは読みにくいため、コーディングが悪いと言う人もいます。決定はあなたに任せますが、1000 に値を割り当てることができないため、条件に誤って値を割り当てることは絶対にできません。

于 2013-08-30T18:46:01.060 に答える
3

if ステートメントでは、と比較するのではなく、 に設定 TestThisしています。演算子は、設定された値を返します。これは、 、 、または ではないため、true と評価されます。演算子を使用するだけです。10001000=undefined0null==

if(TestThis == 1000)
于 2013-08-30T18:47:59.957 に答える
1
if (TestThis == 1000)

このように変更します。

あなたが持っている必要がある場合に同等性を比較するため==

于 2013-08-30T18:45:59.133 に答える
1

変化する:

if (TestThis=1000)

に:

if (TestThis==1000)

実際には、true を返し、条件付きブロックを実行する TestThis に割り当てています。

于 2013-08-30T18:46:54.807 に答える