Javascript 比较字符串与localeCompare vs==?

Javascript 比较字符串与localeCompare vs==?,javascript,node.js,Javascript,Node.js,我在最新的JS项目中遇到了一个非常奇怪的问题。我通常使用==比较字符串,但是当比较两个不同对象的字符串属性时,我得到了false,即使它们是完全相同的字符串。我在Node.js解释器中进行了以下测试: > x = {str: 'hello'} { str: 'hello' } > y = {str: 'hello'} { str: 'hello' } > y.str === x.str true 所以我不明白为什么我的代码不起作用。但是当我从使用=切换到str1.locale

我在最新的JS项目中遇到了一个非常奇怪的问题。我通常使用
==
比较字符串,但是当比较两个不同对象的字符串属性时,我得到了false,即使它们是完全相同的字符串。我在Node.js解释器中进行了以下测试:

> x = {str: 'hello'}
{ str: 'hello' }
> y = {str: 'hello'}
{ str: 'hello' }
> y.str === x.str
true

所以我不明白为什么我的代码不起作用。但是当我从使用
=
切换到
str1.localeCompare
BOOM时,它就起作用了。这两者之间有什么区别?

==
在字符串中查找完全相同的字节

.localeCompare()
允许您忽略字符串中的某些差异(如puncutation、变音符号或大小写),但仍允许它们进行比较,或者在确定哪个字符串在另一个之前时忽略某些差异。此外,它还提供了许多选项来控制使用或不使用哪些比较功能

如果您阅读了for
string.prototype.localeCompare()
,您可以看到可以传入的一系列选项,以控制比较的工作方式。在一个没有特殊字符且大小写相同的普通ascii字符串上,您不太可能看到差异,但是开始讨论变音键或大小写问题,
localCompare()
具有更多功能和更多选项来控制比较

可用于控制比较的一些选项:

  • 数字排序
  • 变音灵敏度
  • 忽略标点符号的能力
  • 案例先行
  • 控制是先比较大写还是小写

  • 此外,
    localeCompare()
    返回一个与
    .sort()
    回调完全一致的值(负值、0或正值)。

    localeCompare
    将当前区域设置考虑在内
    ==
    将原始字节考虑在内。这张图片没有显示问题。如果
    ==
    不起作用,但是
    .localeCompare()
    起作用,那么你的字符串就不是真正的“完全相同的字符串”。@James但这是一幅非常好的图片为什么这两个字符串没有相同的字节?@DanielKobe-从定义上看,有点,因为
    ==
    没有说OP的两个字符串相同,所以它们显然不一样。但是,既然
    localeCompare()
    说它们是相同的,那么这两个字符串的区别只是在
    localeCompare()
    不关心的方面。OP的问题是关于
    ==
    localeCompare()
    之间有什么不同,这就是我在问题中回答的。