2014-01-21 3 views
-5

Что мне здесь не хватает? zipcode имеет допустимую длину, но код if имеет красную squiggly. Это всегда то, как я использовал или в jquery с двойными трубами. Если я заключу оба условия в круглые скобки, тогда я получаю синюю squiggly, которая говорит, что условия всегда верны, как это возможно? Что не так с этим синтаксисом кода?Или ключевое слово в jquery

//testing here if its usa, if so run code below 
alert(zipcode.length);   
if (zipcode.length = 5 || zipcode.length = 9) { 
    zip.addClass("isvalid"); 
    zip.css("border", "1px solid lightgray"); 
} else {      
    zip.css("border", "2px solid red"); 
    alert("Invalid postal code entry, number is 5 or 9 digits"); 
    zip.focus(); 
} 
+5

'=' не то же самое, что '=='. Где дубликат? –

+0

Используйте '===' not '=' –

+0

Просто, чтобы быть ясным, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' являются частью JavaScript, языка. jQuery - это просто * библиотека * (а не язык), написанная на JavaScript, которая добавляет полезные объекты и функции для использования в JavaScript-коде. – ajp15243

ответ

0

Посмотрите на ваш условный снова:

zipcode.length = 5 || zipcode.length = 9 

= является оператор присваивания, и логический или оператор имеет более высокий приоритет, чем оператор присваивания, так пример:

zipcode.length = (5 || zipcode.length) = 9 

5 || myvar будет вычисляться 5 в JavaScript, так что вы получите

zipcode.length = 5 = 9 

9не может быть назначен 5, так что вы получите сообщение об ошибке.

Если я заключу оба условия в круглые скобки, то я получаю синюю squiggly, которая говорит, что условия всегда верны, как это возможно?

Рассмотрим утверждение, как они оценивали:

(zipcode.length = 5) || (zipcode.length = 9) 
5 || (zipcode.length = 9) 
true || (zipcode.length = 9) 
true 

Это совершенно в стороне от каких-либо проблем, которые могут иметь место, если zipcode является строкой по сравнению с массивом против какой-то другой объект, и пытается установить на нем свойство length!

Все это сводится к реальной проблеме, что = (присвоение) - не тот же оператор, что и == или === (равенство). Если вы просто добавите дополнительный знак равенства на каждую сторону, вы внезапно окажетесь , сравнивая длину zipcode до 5 и 9, вместо длина zipcode.

Смежные вопросы