我的最新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时,它可以正常工作。这两者之间有什么区别?
答案 0 :(得分:13)
===
在字符串中查找完全相同的字节。
.localeCompare()
允许你可能想要忽略字符串中的某些差异(例如puncutation或变音符号或case),并且仍然允许它们比较相同或者你想在决定哪些时忽略某些差异string在另一个之前。并且,它提供了许多选项来控制使用或未使用的比较功能。
如果您阅读string.prototype.localeCompare()
的{{3}},则可以看到一大堆可以传递的选项来控制比较的工作方式。在没有特殊字符的普通ascii字符串中,所有情况都相同,您不太可能看到差异,但开始涉及变音或案例问题,localCompare()
有更多功能和更多选项来控制比较。
可用于控制比较的一些选项:
此外,localeCompare()
会返回一个完全对齐的值(负数,0或正数),以便与.sort()
回调一起使用。