2016-04-27 4 views
3

Я прочитал много хорошего материала по правде и ложности (http://adripofjavascript.com/blog/drips/truthy-and-falsy-values-in-javascript.html) и, в частности, различия между «==» и «===» в JavaScript. Лучшие объяснения и ресурсы в основном из этого Stack Overflow Вопрос:Сохранение логических значений в скрытых полях для обработки формы

Which equals operator (== vs ===) should be used in JavaScript comparisons?

Я работаю на форме и нужно сохранить логическое значение в скрытом поле со следующим синтаксисом JQuery:

$('[name="fieldName"]').val(true);

Поэтому я вставляю логическое значение, true или false, в скрытое поле. Во время обработки на экране, я хватаю это значение поля в ряде if-заявления с помощью следующего кода, и сравнить его следующим образом:

$('[name="fieldName"]').val() === "true"

Обратите внимание, как я использую оператор === для сравнения с строковое значение «true».

Мой вопрос; если только Object в JavaScript имеет ссылку на тип, тогда boolean должен быть типом значения. Поэтому я предполагаю, что, поскольку сравнение значений с оператором === сравнивает не только содержимое, но и тип, что вышеприведенное выражение должно возвращать false? Однако в моем коде он возвращает true - может ли кто-нибудь объяснить, почему это так?

Этот код ранее использовался == для сравнения, но чтобы избежать ложных рисков, я реализую === везде, где это возможно. Может ли это быть чем-то связанным с jQuery, преобразующим ценности для меня?

+0

Что такое $ J в сравнении кода? –

+0

опечатка - удален! – coderwurst

ответ

2

Может ли это быть чем-то связанным с jQuery, преобразующим значения для меня?

Элементы формы HTML всегда сохраняют значение как строку, независимо от того, что представляет собой фактический контент. В вашем случае это boolean, но даже если бы он сказал тип number, то вы увидите, что «10.5» не 10.5.

Если вы действительно хотите сравнить логическое значение в булево, что я рекомендовал бы:

Boolean($j('[name="fieldName"]').val()) === true 
+0

благодарит @smaili! – coderwurst