我在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条件?
答案 0 :(得分:5)
如果您期望a
和b
的行为像数字,请不要用引号引起来。这使它们成为字符串。
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