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

时间:2015-11-03 00:04:58

标签: javascript node.js

我的最新JS项目遇到了一个非常奇怪的问题。我通常使用{% for event in output.latest_event_list %} <li><a href="/student/order/{{ event.id }}/">{{ event.name }}</a></li> {% endfor %} 来比较字符串,但是当比较两个不同对象的字符串属性时,即使它们是完全相同的字符串,我也会得到错误。我通过执行以下操作在我的Node.js解释器中测试了它:

===

所以我无法弄清楚为什么我的代码不起作用。但是,当我从使用> x = {str: 'hello'} { str: 'hello' } > y = {str: 'hello'} { str: 'hello' } > y.str === x.str true 切换到=== BOOM时,它可以正常工作。这两者之间有什么区别?

1 个答案:

答案 0 :(得分:13)

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

.localeCompare()允许你可能想要忽略字符串中的某些差异(例如puncutation或变音符号或case),并且仍然允许它们比较相同或者你想在决定哪些时忽略某些差异string在另一个之前。并且,它提供了许多选项来控制使用或未使用的比较功能。

如果您阅读string.prototype.localeCompare()的{​​{3}},则可以看到一大堆可以传递的选项来控制比较的工作方式。在没有特殊字符的普通ascii字符串中,所有情况都相同,您不太可能看到差异,但开始涉及变音或案例问题,localCompare()有更多功能和更多选项来控制比较。

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

  1. 数字整理
  2. 变音敏感度
  3. 忽略标点符号的能力
  4. 案例第一
  5. 控制是大写还是小写比较
  6. 此外,localeCompare()会返回一个完全对齐的值(负数,0或正数),以便与.sort()回调一起使用。