Hiprup

How do you reverse a string in JavaScript?

Strings are immutable, so reversing means building a new string.

  • Split–reverse–join — split into characters, reverse the array, join back. The common one-liner.

  • Loop — build a new string by reading characters from the end.

  • Unicode caveat — naive reversal can break emoji or accented characters; use spread or Intl tools for those.

For interviews: split-reverse-join is usually the expected answer.

const str = 'hello';

// Method 1: Split + Reverse + Join (most common)
console.log(str.split('').reverse().join('')); // 'olleh'

// Method 2: Spread + Reverse + Join (handles some Unicode)
console.log([...str].reverse().join('')); // 'olleh'

// Method 3: Reduce
console.log([...str].reduce((rev, char) => char + rev, '')); // 'olleh'

// Method 4: For loop
function reverse(s) {
  let result = '';
  for (let i = s.length - 1; i >= 0; i--) {
    result += s[i];
  }
  return result;
}

// Edge case: emoji (multi-code-unit characters)
const emoji = 'hello 👋🏽';
console.log(emoji.split('').reverse().join('')); // Broken! (emoji split incorrectly)
console.log([...emoji].reverse().join(''));      // '🏽👋 olleh' — better but skin tone separated

// Correct: Intl.Segmenter (modern)
function reverseString(str) {
  const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
  return [...segmenter.segment(str)].map(s => s.segment).reverse().join('');
}

split('').reverse().join('') is the classic one-liner. Spread [...str] handles basic Unicode (2-byte characters).

For emoji with skin tone modifiers (multiple code points per character), Intl.Segmenter correctly identifies grapheme clusters. The reduce approach builds the reversed string by prepending each character.

The split+reverse+join one-liner is the expected quick answer. Mention the Unicode/emoji edge case to stand out — spread helps but Intl.Segmenter is the correct solution.

The for loop approach shows algorithmic thinking without built-in methods.

How do you reverse a string in JavaScript? | Hiprup