我使用<
来比较两个字符串:
console.log('ca'<'bb'); //false
我已经知道它会比较角色的Unicode编号。因为c
不小于b
。
然而,当我这样做时:
console.log('ba'<'bb');//true
让我感到困惑,因为b
本身不小于b
,似乎只是跳过它并比较下一个字符。
无论如何,我想知道当<
或>
用于比较两个字符串时,这里的规则是什么,对于某些复杂的情况,如果这两个字符串有不同的长度呢?
答案 0 :(得分:3)
它完全按照您的建议完成 - 它会跳过两个字符串中相同的字符,并按代码单位值比较第一个不同的字符。这可以通过规范中的abstract relational comparison algorithm来解释(强调添加):
一个。如果 py 是 px 的前缀,则返回false。
湾如果 px 是py的前缀,则返回true。
C。 设 k 是最小的非负整数,使 px 中位置 k 的字符与位置的字符不同 py 中的。(必须有这样的 k ,因为两个String都不是另一个的前缀。)
<登记/> d。设 m 是整数,它是 px 中位置 k 处字符的代码单位值。
即设 n 是整数,它是 py 中位置 k 处字符的代码单位值。
F。如果 m&lt; n ,返回true。否则,返回false。
答案 1 :(得分:0)
字符串按字母顺序进行比较,依次为:第一个字母,第二个字母等:
'ba'<'bb'
是真的,因为&lt; b(a在b之前是字母表)
'ca'<'bb'
为false,因为c在字母b后面。 (c> b)
答案 2 :(得分:0)
这是lexicographic
比较。
从第一个字母开始,一直持续到不匹配。
的console.log(&#39; CA&#39;&LT;&#39; BB&#39); //假
It starts with c<b ? no. b<c? yes. -> c is 'greater' than b, therefore ca < bb -> false.
的console.log(&#39; BA&#39;&LT;&#39; BB&#39); //真
It starts with b<b ? no. b > b? no. They both equal -> continue to next letter.
a < b ? yes. Therefore -> ba < bb -> true.