运营商如何<或者>比较两个字符串时的工作?

时间:2014-06-06 10:53:45

标签: javascript

我使用<来比较两个字符串:

console.log('ca'<'bb'); //false

我已经知道它会比较角色的Unicode编号。因为c不小于b

然而,当我这样做时:

console.log('ba'<'bb');//true

让我感到困惑,因为b本身不小于b,似乎只是跳过它并比较下一个字符。

无论如何,我想知道当<>用于比较两个字符串时,这里的规则是什么,对于某些复杂的情况,如果这两个字符串有不同的长度呢?

3 个答案:

答案 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.

WIKI