# JS Quiz: Hard: Unicode Length Illusion

**URL:** <https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914>\
**Category:** web dev\
**Created:** [August 4, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914 "2026-08-04T07:00:11Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sarah\_connor](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sarah_connor/32/31258_2.png) [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Post date:** [August 4, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914/1 "2026-08-04T07:00:11Z")

</div>

What does this code log?

```js
const str = 'a\uD83D\uDE00b';
console.log(str.length, [...str].length);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914/1))_

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [August 5, 2026, 7:20am UTC](https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914/2 "2026-08-05T07:20:21Z")

</div>

Going with “4 3” because str. length counts UTF-16 code units (4), while the spread operator correctly iterates over code points (3).

The emoji is a surrogate pair, so. length sees two code units for it, but spread groups the pair into one thing.

---

<div class="post-metadata">

**Author:** ![sarah\_connor](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sarah_connor/32/31258_2.png) [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Post date:** [August 5, 2026, 8:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-unicode-length-illusion/682914/3 "2026-08-05T08:00:06Z")

</div>

**JS Quiz answer:** Option 2 (B).

**Correct choice:** 4 3

**Why:**  
The emoji is a surrogate pair (two UTF-16 code units), so str.length counts ‘a’, high surrogate, low surrogate, ‘b’ = 4. Spreading the string iterates by Unicode code points, treating the surrogate pair as one character, giving ‘a’, emoji, ‘b’ = 3.

**Go deeper:**

> **[kirupa.com - For Loops in JavaScript](https://www.kirupa.com/html5/strings_in_js_temp.htm)**
>
> Learn how to use the 'for' statement in JavaScript to create loops that start and end.

**First-answer leaderboard**

1. @emmawalter5 - 1 (first) 🏆
2. @kirupa - 1 (first) 🏆
