Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

What if `weAreConnected` is `null` or `undefined`?

WalterSear's solution solves the issue since both `null` and `undefined` would become `false`:

    this.setState({
        isConnected: Boolean(weAreConnected)
    })

but in your case you could set `isConnected` to `null` or `undefined`

so if later in code someone makes the mistake of writing:

    if (this.state.isConnected === false) { /* do stuff */ }
they could have a bad surprise.


this.setState({ isConnected: !!weAreConnected })


This^, plus, you shouldn't really have "null" or "undefined" variables which you treat as bool (if you do, then that's a bug)


Ding ding ding right answer. This is the way most senior javascript devs would right it.


They'd right it if they were fixing it or write it if they were writing it ;)


It certainly doesn't hurt to "cast" the input to boolean. But your second example is the next code smell, because it should just be

  if (!this.state.isConnected) { /* do stuff */ }
(which still works as expected even when dealing with null or undefined).


Agreed, but you can't anticipate what another dev could write :)

Or if you pass down that `isConnected` down to a library where for some reason they assumed `null` should default to `true`

Of course it's very unlikely, but my point is you can't know all use cases of `this.state.isConnected` in advance on a large project so as you say it doesn't hurt to sanitize the input.


That's why there's PropTypes so you can define what type a given prop should be. An error is raised if a higher level component passes in a prop of an incorrect type.


this.setState({ isConnected: (weAreConnected === true) })

seems 100% equivalent


Another flavor of this surprise: JSON.stringify doesn't "see" undefined. JSON.stringify({foo:undefined}) returns "{}" :)


Because type (prototype) and data (Json) are two different things, if you need it -- JSON.stringify(obj, (k, v) => v === undefined ? null : v);




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: