Ответ Javascript изменяется в зависимости от порядка сравнения

#javascript #string #sorting #join #comparison

#javascript #строка #сортировка #Присоединиться #сравнение

Вопрос:

Я относительно новичок в 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
 

Я пытался разобраться в этом и довольно застрял — кто-нибудь может помочь объяснить?

Спасибо!

Ответ №1:

В отличие от большинства методов Array.prototype , sort() манипулирует объектом на месте. Следовательно, в вашем первом фрагменте arr во втором операнде === уже отсортирован, и сравнение всегда возвращается true .