2015-03-26 2 views
1

f является true и r является "0", но сравнение решает true. После большой царапины головы, я ожидаю, что это потому, что r является строкой, а не логической или целочисленной. Каков наилучший способ справиться с этим?JavaScript, сравнительный оператор с нулевой строкой

https://jsfiddle.net/nboeo0z2/

var r=$('input[name="myradio"]:checked').val(); 
var f = true; 
console.log('r',r,'f',f,'test',(!f || r) ? true : false); 

<input type="radio" value="1" name="myradio">Yes 
<input type="radio" checked="checked" value="0" name="myradio">No 
+0

val() - это строка. Строка правдивая. – epascarello

+1

Добро пожаловать в типы JavaScript! https://charlieharvey.org.uk/page/javascript_the_weird_parts –

+0

@epascarello ну, точнее, ненулевая строка является правдой. – Shashank

ответ

8

Любая непустая строка является "truthy". Если вы знаете, что значение должно выглядеть как число, то вы можете заставить это преобразование:

var r = +$('input[name="myradio"]:checked').val(); 

Унарный + оператор заставляет строку, которая будет преобразована в число, а число 0 не «truthy» ,

Если значение не числовой, то числовое преобразование даст NaN, и это так же, как false0.

+0

Никогда раньше не слышал термин «правдивый». Очень подходит! Спасибо – user1032531

+0

@ user1032531 отметил автор JavaScript Дуглас Крокфорд начал использовать термины «правдивый» и «фальшивый» несколько лет назад, заимствуя терминологию из американской политической программы сатиры * The Colbert Report *. – Pointy

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