【问题标题】:In which cases should `==` be used over `localeCompare` and viceversa, in Javascript?在 Javascript 中,在哪些情况下应该使用 `==` 而不是 `localeCompare`,反之亦然?
【发布时间】:2015-01-21 10:27:33
【问题描述】:

比较它们各自的优缺点是什么?
在 Javascript 中,在哪些情况下应该使用 == 而不是 localeCompare,反之亦然?

【问题讨论】:

标签: javascript string


【解决方案1】:

它们根本不一样!

非严格比较会比较字符串以查看它们是否相同(仅包含字符串,因为这是 localeCompare 的作用,类型无关紧要)。

"test" == "test" // true

localCompare 远不止于此,它返回一个数字,指示引用字符串是在给定字符串的排序顺序之前还是之后还是与给定字符串相同,并且使用指定的语言。

'a'.localeCompare('c') // returns a negative value, i.e. -1 etc, a comes before c
'a'.localeCompare('a') // returns 0, they are the same
'c'.localeCompare('a') // returns a positinve value, i.e. 1 etc, c comes after a

请注意,使用的排序顺序完全取决于实现,但在大多数浏览器中它将按字母顺序排列

或特定语言

'ä'.localeCompare('z', 'sv')); // a positive value: in Swedish, ä sorts after z

由于它返回一个负整数、零或一个正整数,它在诸如 sort() 之类的函数中很有用,它期望排序回调的返回就是这样,一个负整数、零或一个正整数。

MDN

【讨论】:

  • 您的第二个示例将返回 -1 而不是 -2 ;-)
  • @KevinVoorn - 这取决于浏览器,但由于我的 Chrome 也返回 -1 我会更改它
【解决方案2】:

localeCompare== 不同。当您使用== 比较两个变量时,您检查变量是否具有相同的内容。这将返回一个布尔值(真/假)。但是,localeCompare 不返回布尔值,而是返回一个 int。

当两个变量相同时,您将收到0,但如果您的变量不同,您将收到1-1。该值取决于第一个变量在排序顺序中是在第二个变量之前还是之后。

所以当我纯粹验证两个变量是否相同时,我自己会使用==,但是当您想查看排序顺序中哪个变量排在第一位时,localeCompare 会很方便,但是它可以 用于比较两个变量,看它们是否相同。

string a = "hello";
string b = "world";

a == b // returns false
a.localeCompare(b); // returns -1

为了稍微回答您的问题,以下是使用给出的任何一个示例的特点/优点和缺点:

使用==

  • 返回布尔值而不是字符串/整数/...
  • 大多数人更容易阅读

使用localeCompare

  • 返回一个整数(-1、0 或 +1)
  • 可用于对变量进行排序

【讨论】:

    【解决方案3】:

    localeCompare 不只是检查值是否相等。它还会比较不同的值,并根据哪个值更高返回1 / -1。它的返回值与相等检查完全不同。

    localeCompare 可用于对字符串进行排序,因为当两个值不相同时,返回值与== 不同,== 只能用于确定相等性(价值,而不是类型)。

    例如:

    "2".localeCompare(2) // 0
    "2".localeCompare(1) // 1
    "2".localeCompare(3) // -1
    
    "2" == 2 // true
    "2" == 1 // false
    "2" == 3 // false
    
    "b".localeCompare("b") // 0
    "b".localeCompare("a") // 1
    "b".localeCompare("c") // -1
    
    "b" == "b" // true
    "b" == "a" // false
    "b" == "c" // false
    

    localeCompare 的返回值恰好是 Array.prototype.sort() 期望从它的处理程序返回的值。

    【讨论】:

      【解决方案4】:

      localeCompare对于实现排序(升序或降序)功能非常有用:

      myLabelsArray.sort(function(a, b){
          return a.label.localeCompare(b.label);
      });
      

      确实,localeCompare 返回-10(如果相等)或1(基于区域设置语言规则),允许进行排序。

      使用== + < 实现它需要更多的行,显式返回整数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2011-12-07
        • 1970-01-01
        相关资源
        最近更新 更多