DEV Community

Cover image for A few JavaScript puzzlers
Thomas C. Haflich
Thomas C. Haflich

Posted on

A few JavaScript puzzlers

Cover photo by Kyle Glenn on Unsplash.

Good morning! 🌥️ How's your weekend going?

I've been sick lately, so haven't had a lot of energy to work on the usual posts. But I've put together a few quick "riddles" specific to JavaScript.

If you get the answers early on, try to not spoil the answers in the comments for those just looking for hints rather than solutions. (Spoiler tags when?)

#1 - Non-reflexive

This one is fairly simple if you know the language "gotchas", but quite a puzzle indeed if you've never seen this behavior before.

x === x; // true
x[+[]] === x[+[]]; // false
Enter fullscreen mode Exit fullscreen mode

There is more than one answer, see if you can find the whole solution space for an additional challenge.

Hint links:

#2 - Reciprocal

Here's another head scratcher:

x === y; // true
1/x === 1/y; // false
Enter fullscreen mode Exit fullscreen mode

Find values of x & y.

The senior JS devs are groaning and probably already know the answer. But for those of you less practiced, here is a hint:

#3 - Prototype

And another one:

var someone = function() {};
someone.prototype.attributes = {};

var alice = new someone();
alice.attributes.name = 'Alice';

var bob = new someone();
bob.attributes.name = 'Bob';

var eve = new someone();
Enter fullscreen mode Exit fullscreen mode

At the end of this code, what is eve.attributes.name?

Your hints are:


JavaScript really is quite a puzzling language, isn't it? Which ones did you get immediately, and which did you need to look up?

Have a great weekend, and don't forget to be awesome!

Small white dog wearing a bow-tie giving a high-five.

Top comments (3)

Collapse
 
karataev profile image
Eugene Karataev

Good puzzles to think about.

  1. Couple minutes of thinking and still can't find a solution
  2. Somehow remember the right answer
  3. I think it's the easiest task if you remember how the prototypes work in JS.
Collapse
 
maxbrettwell profile image
MaxBrettwell • Edited

In the 2nd problem, am I correct that x and y are some type or value that is NaN?

Collapse
 
tchaflich profile image
Thomas C. Haflich

In the second problem:

typeof x; // number
typeof y; // number
isNaN(x); // false
isNaN(y); // false

I can tell you that at least one of x and y is "intuitively" a number.


This is something that ends up being quite peculiar to an algebraic intuition, so if you haven't seen it in the wild it may not be something you can logic out (unless you take quite a leap). It is, however, frequently referenced in lists of language "gotchas".

I don't think I've actually spotted it anywhere else but JS, though technically according to the IEEE 754 specification it should be applicable elsewhere. Possibly it's just that since JS lacks any additional numeric types it ends up being more common.