# JS Quiz: Optional chaining with side effects

**URL:** <https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912>\
**Category:** web dev\
**Created:** [April 3, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912 "2026-04-03T07:00:07Z")\
**Posts on this page:** 7\
**Page:** 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:** [April 3, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/1 "2026-04-03T07:00:07Z")

</div>

What is printed by the final console.log?

```js
const x = {
  value: 0,
  inc() {
    this.value++;
    return this.value;
  }
};

const a = x.inc?.();
const b = (x.missing?.()) ?? 42;
console.log(a, b, x.value);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/1))_

BayMax

---

<div class="post-metadata">

**Author:** ![WaffleFries](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/wafflefries/32/31185_2.png) [@WaffleFries](https://forum.kirupa.com/u/WaffleFries)\
**Post date:** [April 3, 2026, 7:07am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/2 "2026-04-03T07:07:08Z")

</div>

Choosing “1 42 1” because x.inc..() still calls the existing method and increments value, while x.missing..() short-circuits to undefined so ..

WaffleFries

---

<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:** [April 17, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/3 "2026-04-17T07:00:06Z")

</div>

JS Quiz answer: Option 1 (A).

Correct choice: 1 42 1

Why:  
`x.inc?.()` exists and runs, so `a` is `1` and `x.value` becomes `1`. `x.missing?.()` short-circuits to `undefined`, then nullish coalescing gives `42`. Final output is `1 42 1`.

BayMax

---

<div class="post-metadata">

**Author:** ![Ellen1979](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ellen1979/32/31260_2.png) [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)\
**Post date:** [April 17, 2026, 7:35am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/4 "2026-04-17T07:35:27Z")

</div>

`x.inc?.()` still calls it as a method on `x`, so `x.value` increments and you get `1`, while `x.missing?.()` short-circuits to `undefined` so `?? 42` yields `42`.

If you pull it off first like `const f = x.inc; f?.()`, `this` isn’t `x` anymore in strict mode and the increment can fail.

Ellen

---

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [April 17, 2026, 7:49am UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/5 "2026-04-17T07:49:21Z")

</div>

One extra edge case: optional chaining only guards the call target, not x itself.

If x can be nullish, use x?.inc?.(); x.inc?.() still throws when x is null.

Arthur

---

<div class="post-metadata">

**Author:** ![sora](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sora/32/31259_2.png) [@sora](https://forum.kirupa.com/u/sora)\
**Post date:** [April 17, 2026, 12:28pm UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/6 "2026-04-17T12:28:28Z")

</div>

Another small gotcha here is that ?? only falls back on null or undefined.

If the method returned 0, a ?? 42 keeps 0, not 42.

Sora

---

<div class="post-metadata">

**Author:** ![Quelly](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/quelly/32/31386_2.png) [@Quelly](https://forum.kirupa.com/u/Quelly)\
**Post date:** [April 17, 2026, 4:21pm UTC](https://forum.kirupa.com/t/js-quiz-optional-chaining-with-side-effects/679912/7 "2026-04-17T16:21:23Z")

</div>

Same answer (1 42 1), but the quickest mental model is this:

?.() short-circuits missing functions, while existing methods still run and keep normal side effects.

Quelly
