我对javascript中的if语句感到困惑

时间:2019-12-30 02:34:50

标签: javascript if-statement

我在javascript中有这样的条件:

var a = '60';
var b = '500';

if(a < b) {
  console.log('true');
} else {
  console.log('false');
}

但是结果是错误的,我的期望应该是真的,但是我试图与php代码进行比较:

<?php 

  $a = '60';
  $b = '501';

  if($a < $b) {
    echo 'true';
  } else {
    echo 'false';
  }

?>

结果为true,如果在javascript中没有其他if条件,则如果该值不为true,它将自动读取为false条件?

5 个答案:

答案 0 :(得分:5)

如果您期望ab的行为像数字,请不要用引号引起来。这使它们成为字符串。

var a = 60;
var b = 500;

PHP会自动将其转换为数字。尝试运行echo $a - 1;,您将得到59。同时尝试"00001" == "1"。你会成真的! JavaScript不会进行这种检测。相反,JavaScript会按字符串的char codes按字母顺序比较字符串。按字母顺序,我的意思是说它比较每个字符串的前几个字符。如果它们具有相同的字符代码,它将移至每个字符串的下一个字符。如果一个字符的字符代码比另一个字符的字符代码高,则它比另一个字符串“更大”,就像我们确定“ dog”或“ dot”按字母顺序排在首位时一样。在这种情况下,JavaScript会发现6的字符代码为54,而5的字符代码为53,并且它将在那时和那里得出结论。 "60"大于"500"

答案 1 :(得分:2)

PHP在比较它们之前将两个字符串都转换为数字。如果要在JavaScript中使用相同的代码,请使用:

if (parseInt(a, 10) < parseInt(b, 10)) {

这是documented

  

如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串均为converted to a number,并且比较将以数字形式进行。这些规则也适用于switch语句。当比较为===!==时,不会进行类型转换,因为这涉及比较类型和值。

答案 2 :(得分:1)

您应该避免在数字中添加引号,但是如果存在引号,那么您 可以使用parseInt转换为数字。

尝试一下:

var a = '60';
var b = '500';

if(parseInt(a) < parseInt(b)) {
  console.log('true');
} else {
  console.log('false');
}

答案 3 :(得分:1)

好问题。 if-else语句正确,但是变量设置不正确。

您可以使用var,但是您应该使用let或const。 (但这只是语义上的事情)

遇到问题的真正原因是您将数字放在字符串中。所以从字面上看,“ 60”不小于“ 500”。

var a = 60; var b = 500;

在这种情况下,它会成真。 60实际上小于500 =)。

继续做好工作。

答案 4 :(得分:0)

这不是Java语言支持if,else if和else语句的情况,但是在您的代码中,您已将值声明为字符串,因此编译器不会直接比较字符串,因此您必须将变量a和b传递给“ Number “的javascript函数,它将字符串转换为整数。

var a = '60';
var b = '500';
var aint = Number(a);
var bint = Number(b);

if(aint < bint) {
  console.log('true');
} 
else if(aint>bint){
    console.log('a is greater');
  }else {
  console.log('false');
}

Output: true