我对理解这个 "9">"099" 返回 true 和 "9">"99" 返回 false 感到困惑(9 只是一个例子,它的发生就像 "x">"xabc" 返回 false 和 "x"> "abc" 返回真,其中 a 小于 x 但 abc 大于 x 且 a,b,c,x 是数字)。提前致谢。
2 回答
就像 "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 引擎。
x>abc
is 返回 true,因为x
其ascii
值大于a
but x>xbc
is false 虽然x
值ascii
等于x
,但是对于两个字符串中的第二个字符,第一个字符串只有x
一个字符,而第二个字符串作为第二个字符..xbc
b
在x>abc
x
与 比较a
,当在第一个字符位置x
大于时a
,因此返回true
在第二个示例x>xbc
中, firstx
与 比较x
,返回0
,因为两者具有相同的 ascii 值..
但是然后b
比较,""
因为"x"
只有"x"
while"xbc"
有"b"
作为第二个字符..存在因此xb
大于x
所以它返回false