Javascript的答案会根据比较顺序而改变

Javascript answer changes depending on comparison order

本文关键字:比较 顺序 改变 答案 Javascript      更新时间:2023-09-26

我对Javascript比较陌生(先学了Ruby),但是一直被我看到的一些奇怪的不一致所迷惑,我试图找出底层机制是什么,这样我就能更好地理解这种语言。其中之一是,当我做比较时,两个元素在===符号的哪一边并不重要,但我见过这种情况,不明白为什么。下面是查看字符串是否按字母顺序排序的基本函数示例:

这个版本总是返回true:

function sorted(str) { 
  var arr = str.split("");
  return arr.sort().join('')  === arr.join('');
}
sorted('abc') // => true
sorted('cba') // => true

而这将返回正确的答案:

function sorted(str) { 
  var arr = str.split("");
  return arr.join('') === arr.sort().join('');
}
sorted('abc') // => true
sorted('cba') // => false

我试着弄清楚这个问题,但我很困惑——有人能帮我解释一下吗?

谢谢!

Array.prototype的大多数方法不同,sort()在适当的位置操作对象。因此,在您的第一个代码片段中,===的第二个操作数中的arr已经排序,比较总是返回true