9

我对理解这个 "9">"099" 返回 true 和 "9">"99" 返回 false 感到困惑(9 只是一个例子,它的发生就像 "x">"xabc" 返回 false 和 "x"> "abc" 返回真,其中 a 小于 x 但 abc 大于 x 且 a,b,c,x 是数字)。提前致谢。

4

2 回答 2

13

就像 "x">"xabc" 返回 true 和 "x">"abc" 返回 false,其中 a 小于 x 但 abc 大于 x 并且 a,b,c,x 是数字)

是(除了大于,而且那些是字符,而不是数字)"abc"。这是一个文本比较,字符串中的数字在比较之前不会转换为数字。因此,比较逐个字符进行,第一次发现差异时停止。在您的情况下,由于左侧字符串中的 大于右侧字符串中的 ,因此结果仅由第一个字符确定。(同样的事情发生在,因为大于。)"x""99" > "099""9""0""x" > "abc""x""a"

请注意,两者之间存在很大差异:

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

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

在后一种情况下,由于其中一个操作数是数字,JavaScript 引擎会尝试将另一个操作数转换为数字,然后比较这些数字。在前一种情况下,因为两个操作数都是字符串,所以它不会,它会进行文本比较。

旁注:小心以数字开头的字符串0(如“099”)。如果它们最终被隐式转换为数字,它们可能会被视为八进制(以 8 为基数),具体取决于所使用的 JavaScript 引擎。

于 2013-02-21T12:06:32.963 回答
3

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

but x>xbcis false 虽然xascii等于x,但是对于两个字符串中的第二个字符,第一个字符串只有x一个字符,而第二个字符串作为第二个字符..xbcb

x>abc

x与 比较a,当在第一个字符位置x大于时a,因此返回true

在第二个示例x>xbc中, firstx与 比较x,返回0,因为两者具有相同的 ascii 值..

但是然后b比较,""因为"x"只有"x"while"xbc""b"作为第二个字符..存在因此xb大于x

所以它返回false

于 2013-02-21T12:12:15.597 回答