https://stackoverflow.com/questions/2167602/optimum-way-to-compare-strings-in-javascript
https://stackoverflow.com/questions/1179366/is-there-a-javascript-strcmp
( str1 < str2 ) ? -1 : ( str1 > str2 ? 1 : 0 );
localeCompare() 方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同。
Atomics.compareExchange() 静态方法会在数组的值与期望值相等的时候,将给定的替换值替换掉数组上的值,然后返回旧值。 此原子操作保证在写上修改的值之前不会发生其他写操作。
https://www.tutorialspoint.com/javascript/string_localecompare.htm
"string1".localeCompare("string2" )
"string".localeCompare("");
// 1
"string".localeCompare("string");
// 0
"string".localeCompare("0");
// 1
"string".localeCompare("xyz");
// -1
"string".localeCompare("1");
// 1
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
str.equals(str)
JavaScript 中的相等性判断
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
ES2015中有四种相等算法:
抽象相等比较 (==)
严格相等比较 (===): 用于 Array.prototype.indexOf, Array.prototype.lastIndexOf, 和 case-matching
同值零: 用于 %TypedArray% 和 ArrayBuffer 构造函数、以及Map和Set操作, 并将用于 ES2016/ES7 中的String.prototype.includes
同值: 用于所有其他地方
JavaScript提供三种不同的值比较操作:
严格相等 ("triple equals" 或 "identity"),使用 === ,
宽松相等 ("double equals") ,使用 ==
以及 Object.is (ECMAScript 2015/ ES6 新特性)
简而言之,在比较两件事情时,double equals将执行类型转换;
三等于将进行相同的比较,而不进行类型转换 (如果类型不同, 只是总会返回 false );
而Object.is的行为方式与三等式相同,但是对于NaN和-0和+0进行特殊处理,所以最后两个不相同,而Object.is(NaN,NaN)将为 true。
(通常将NaN与NaN进行比较-即, 使用双等号或三等于-评估为false,因为IEEE 754这样说.)
请注意,所有这些之间的区别都与其处理原语有关; 没有一个比较参数在概念上, 是否在结构上是相似的。