我最近的JS项目遇到了一个很奇怪的问题。我通常使用===比较字符串,但是当比较两个不同对象的字符串属性时,我得到了false,尽管它们是完全相同的字符串。我通过以下操作在我的Node.js解释器中测试了这一点:
> x = {str: 'hello'}
{ str: 'hello' }
> y = {str: 'hello'}
{ str: 'hello' }
> y.str === x.str
true因此,我无法理解为什么我的代码不起作用。但是,当我从使用===切换到str1.localeCompare热潮时,它就能工作了。这两者有什么区别?
发布于 2015-11-03 00:09:49
===在字符串中查找完全相同的字节。
.localeCompare()允许这样一个事实,即您可能想忽略字符串中的某些差异(例如,穿孔、纵横或大小写),并且仍然允许它们比较相同的字符串,或者在决定哪个字符串在另一个字符串之前时,您希望忽略某些差异。并且,它提供了许多选项来控制哪些比较特性是使用的或不使用的。
如果您阅读了MDN文档 for string.prototype.localeCompare(),您可以看到大量的选项,您可以传入这些选项来控制比较的工作方式。在一个普通的ascii字符串中,没有相同的特殊字符,您不太可能看到区别,但是开始进入diacriticals或case问题,localCompare()有更多的特性和更多的选项来控制比较。
可用于控制比较的一些选项如下:
此外,localeCompare()返回一个与.sort()回调完全对齐的值(负值、0值或正值)。
https://stackoverflow.com/questions/33489250
复制相似问题