2013-08-30 3 views
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.'); 
     } 

     } 
    } 
} 
+1

Просто отметив, что в вашем «тесте» у вас есть = вместо ==. Но это может быть просто ошибка переноса? –

+1

Вы не поверите, сколько людей имеют точно такую ​​же проблему. –

ответ

7

Вы присваиваете значение переменной в вашей, если проверки состояния. Переменной TestThis присваивается значение 1000, которое будет истинным после того, как JavaScript будет преобразован в boolean. Вот почему ваша функция всегда выполняется. Вы можете узнать больше об автоматическом преобразовании типа here.

Теперь, чтобы исправить свой код, изменить это -

if (TestThis=1000) 

к этому -

if (TestThis == 1000) 

или если вы не хотите, автоматическое преобразование типов -

if (TestThis === 1000) 

Иногда люди как изменить значения в сравнении, следующим образом:

if (1000 === TestThis) 

Это называется Yoda Condition (да, названный в честь Grand Jedi Master Yoda). Преимущество состоит в том, что если кто-то ошибочно ставит только один равный, это приведет к ошибке, поскольку вы не можете назначить что-либо константе. Я никогда не использовал его лично (и, вероятно, никогда не буду, потому что считаю его довольно нетрадиционным).

+0

Лучше еще получить привычку делать «if (1000 == TestThis)», а затем «if (1000 = TestThis)» приведет к ошибке –

1
if (TestThis == 1000) 

Изменить как это.

Для сравнения равенства, если вы должны иметь ==

4

JavaScript позволяет присвоить значение в условном, так это TestThis=1000 результатов в 1000 и в условном операторе положительных чисел (на самом деле ничего не 0) результат к оценке к истине.

Чтобы сделать это условное, вы должны сделать TestThis===1000 (и вы должны почти всегда использовать === над == как === заставляет фактическое сравнение двух и не пытается преобразовать одну часть условной сравняться другой.)

Вы также можете сделать 1000 === TestThis (или, наоборот, 1000 == TestThis) Некоторые люди говорят, что это плохое кодирование, потому что его трудно читать. Я оставлю это вам решать, но это абсолютно не позволит вам случайно присвоить значение в условном выражении, потому что вы не можете присвоить значение 1000.

1

Изменение:

if (TestThis=1000) 

To:

if (TestThis==1000) 

Вы на самом деле присвоения TestThis который возвращает истину и выполнить условный блок.

3

В, если заявление, вы настройкиTestThis к 1000, а не сравнения его 1000. Оператор = возвращает значение, которое было установлено равным true, потому что оно не undefined, 0, или null. Вам просто нужно использовать оператора ==.

if(TestThis == 1000) 
Смежные вопросы