JavaScript:使用大于号比较字符串

10
我在理解这个问题时感到困惑。当比较"9">"099"时,返回的结果是true;但是比较"9">"99"时,返回的结果是false。(这里的9只是一个例子,实际上会出现类似于"x">"xabc"返回false,"x">"abc"返回true的情况,在这种情况下,a比x小,但abc比x大,其中a、b、c、x都是数字)。谢谢。

"x" > "xabc" 返回 false,而 "x" > "abc" 返回 true。 - madfriend
2个回答

14
它的意思是" x ">" xabc" 返回true,而"x">"abc"返回false,其中a比x小,但abc比x大,a、b、c、x都是数字。是一种文本比较,字符串中的数字在进行比较之前不会转换为数字。因此,比较逐个字符进行,第一次发现差异时停止。在您的"99" > "099"情况下,由于左侧字符串中的"9"大于右侧字符串中的"0",因此结果仅由第一个字符确定。(在"x">"abc"中也发生了同样的事情,因为"x"大于"a"。)请注意,以下两者之间有很大的区别:
console.log("99" > "099"); // "true"

并且

console.log(99 > "099"); // "false"

在后一种情况下,因为其中一个操作数是数字,JavaScript引擎会尝试将另一个操作数转换为数字,然后进行比较。在前一种情况下,由于两个操作数都是字符串,它不会这样做,而是进行文本比较。
顺便提一下:要小心以0开头的数字字符串(如"099")。如果它们被隐式转换为数字,根据使用的JavaScript引擎,它们可能会被视为八进制(基数为8)。

3

x>abc返回true,因为xascii值大于a

但是x>xbc是false,尽管xascii值等于x,但对于两个字符串中的第二个字符,第一个字符串x只有一个字符,而第二个字符串 xbc 有b

x>abc

x处于第一个字符位置时,将其与a进行比较,因此它返回true

在第二个示例x>xbc中,首先将xx进行比较,这将返回0,因为它们具有相同的ASCII值。

但是然后将b""进行比较,因为"x"只有"x",而"xbc"的第二个字符是b存在,因此xb大于x

所以它返回false


2
两件事情:1. 它是“true”,而不是“false”。2. JavaScript使用Unicode(大多数情况下),而不是ASCII。因此,“x>abc”返回false是不正确的,因为x的Unicode值比a大。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接